转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_07.html

本来上一篇就结束了,但是有小伙伴私信我觉得还差了很多重要的内容,比如方块如何构成了自然的地形,液体是如何流动,光照如何实现,以及红石电路,没有这些还怎么叫《我的世界》呢?

那这一篇就给大家一点启发,没有代码,只有思路(对于想真心钻研的人来讲应该够了)。

一、自然地形的生成

首先使用柏林噪音生成起伏的山脉,就跟我们前面生成的一样。

然后生成生态。

《我的世界》里的生态主要使用维诺图(Voronoi Diagram)算法来生成。

生成完生态就来生成自然的地形了,每一块区域都经过一层层地处理,放大缩小边缘过度等等处理之后,就生成了美丽的自然风景。

具体可以看这里详细分析了《我的世界》的源码 http://blog.csdn.net/xfgryujk/article/details/61915888 总共七章

二、液体的流动

玩过《我的世界》的人应该都是很喜欢它的液体系统的,水流的用处非常广泛,除了可以做成水帘装饰,还可以做自动收割机,圆石生成机等等。

我们之所以觉得这个水是一个难点,是因为我们固定的思维,认为水的主体方块跟它旁边流下去的水流是一体的,所以我们百思不得其解,觉得它的实现难度非常高(反正我真的没想到如果是一体的该怎么实现)。

然后呢,其实换一种思维,它不是一体的,它就像树苗一样。水的主体方块是树苗,树苗会变成大树,变成大树的过程不就是改变周围的方块吗?比如把原来的空气方块替换成了树干方块。

这么一想,是不是觉得非常简单?

我们只需要做几个水流的子体,然后用一个携程来处理任何一个被放置或销毁的方块周围的水方块,然后递归地生成一一对应的子体。

当然这里是一个简单的示例,它还有很多其他的各种子体,而且子体和子体相遇时应该怎么处理也需要灵活处理。

比如假设这里检测到,水四级子体的下一个Block是岩浆的三级子体,那么这里应该生成一个圆石。

三、红石电路

看了上面水的生成,你应该有点想法了吧?没错,差不多的,检测红石信号源周围的方块是不是红石电路,然后依次改变方块(或者方块的状态)。

四、光照

光照是其中最最最最最复杂的,它用到了Unity3D、数学、物理等学科非常多的知识,实现难度很大很大。

它的实现方式可以直接看知乎这个话题中王远的回答 https://www.zhihu.com/question/24459078

还有它的百科,中文的,一定要看 https://minecraft-zh.gamepedia.com/index.php?title=%E4%BA%AE%E5%BA%A6&variant=zh

然后自己先做2D的来试试看,慢慢研究,一步一步来实现。实在实现不了就放弃吧。

五、面数优化

在我的世界里,Y轴上只有一个Chunk,但是我们的不一样,我们的Y轴上还分为16个Chunk。

这么做其实不好,多增加了一层循环,在存储和网络传输的时候也会增加消耗,但是因为Unity3D在2017.3版本以前一个物体最多只能有65k个面,所以只能这样实现。

现在好了,从Unity3D2017.3版本开始,如果一个物体的面如果超过65k,就会交由32位对象来存储,这样最多就能存储4226k的面,Y轴只有一个Chunk也绰绰有余~

具体的代码我还没实现,有兴趣的自己优化一下,应该是很简单的~

完结,散花

【Unity3D】Unity3D开发《我的世界》之七、番外篇的更多相关文章

  1. Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  2. 知识图谱实战开发案例剖析-番外篇(1)- Neo4j是否支持按照边权重加粗和大数量展示

    一.前言 本文是<知识图谱实战开发案例完全剖析>系列文章和网易云视频课程的番外篇,主要记录学员在知识图谱等相关内容的学习 过程中,提出的共性问题进行展开讨论.该部分内容原始内容记录在网易云 ...

  3. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  4. Java微信公众平台开发【番外篇】(七)--公众平台测试帐号的申请

    转自:http://www.cuiyongzhi.com/post/45.html 前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[ ...

  5. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  6. 番外篇!全球首个微信应用号开发教程!小程序 DEMO 视频奉上!

    大家好,我是博卡君.经过国庆节的七天假期,相信很多朋友都已经研究出自己的小程序 demo 了吧?我最近也利用休息时间关注了一下网上关于小程序开发的讨论,今天就利用这个番外篇谈谈自己对小程序的一些想法吧 ...

  7. [置顶] think in java interview番外篇-谈程序员如何修练英语

    一.程序员对英语能力的重视度和能力要求应该是在各行各业中排在比较靠前的 这样说吧,英语程度的好坏直接影响着一个程序员的编程.开发.创新能力. 道理很简单: 1. 计算机和软件是用英语创造出来的 2. ...

  8. 智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电

    转载:智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电 前面我写了一个系列共三篇的智能家居实践,用的是 Amazon Echo 实现语音控制,但是 Amazon Echo ...

  9. 渗透测试思路 - CTF(番外篇)

    渗透测试思路 ​ Another:影子 (主要记录一下平时渗透的一些小流程和一些小经验) CTF(番外篇) ​ 笔者是一个WEB狗,更多的是做一些WEB类型题目,只能怪笔者太菜,哭~~ 前言 ​ 本篇 ...

  10. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. nginx加权轮询和ip_hash

    nginx为后端web服务器(apache,nginx,tomcat,weblogic)等做反向代理 几台后端web服务器需要考虑文件共享,数据库共享,session共享问题.文件共享可以使用nfs, ...

  2. C#基础(六)--枚举的一些常用操作

    本章将介绍以下几点: 1.如何把其它类型转换为枚举类型? 2.如何把枚举中的值添加到下拉菜单中? 一.如何把其它类型转换为枚举类型?        我们回顾一下有关字符串与数字之间的转换,如:     ...

  3. 用Elasticsearch构建电商搜索平台,一个极有代表性的基础技术架构和算法实践案例[转]

    原文链接:http://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653160642&idx=1&sn=608f4e6883 ...

  4. 序列化与transient

    满足下面四个条件中的一个的类就不应该被序列化:  1.一个类与本地代码(native code)有紧密的关系,如java.util.zip.Deflater,这个类中很多都是native的. 2.对象 ...

  5. 洛谷 [P2146] 软件包管理器

    树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 #include <iostream> #include <cstdio> # ...

  6. HDU 4333 Revolving Digits

    扩展KMP的应用 我们发现本题的关键在于如何高效的判断两个同构字符串的大小关系,想到如果能够预处理出每一个同构字符串与原字符串的最长公共前缀,那么直接比较它们不一样的部分就好,扩展KMP正好是用来处理 ...

  7. BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]

    题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...

  8. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1435  Solve ...

  9. centos 7 配置 到多站点设置

    背景 : 前面配置了 win2008 WAMP环境, 这次因为一些事情 新买了服务器  只有 win2003 和 win2012, 试着配置2012 WAMP环境 发现比 2008 缺的配置文件多很多 ...

  10. MySQL Community Server 5.7安装详细步骤

    mysql社区版安装配置步骤较繁琐,几经搜索之后才成功安装,此文将所有的安装步骤及安装过程中遇到的问题进行了总结 1. 下载MySQL社区版     最新版下载地址:https://dev.mysql ...