系列概述
这套教程涵盖了Unity Mesh编程、模拟水算法(water simulations)、方块移动算法(marching-cubes)等等。这是一套比较有深度的教程,可能需要你了解一些Unity和C#相关的知识。
预备开始
上一次我们为方块添加了贴图,这一章我将为方块添加网格碰撞。
从下图可知,我们的方块已经有网格数据了,然而我们的Mesh Collider的Mesh属性还没有任何网格数据。
接下来,让我们来为方块添加网格碰撞。
提示
更新网格碰撞数据是很耗性能的,因此我们应该把网格碰撞设计得越简洁越好。如果你不打算使用Unity自带的物理系统,那么你可以百度一下“AABB”碰撞检测算法,这是最简单的碰撞算法之一了。
因为网格碰撞会随着网格数据的变化而变化,为了方面网格碰撞的数据能与网格数据同步变化,首先在“MeshDta.cs”脚本中添加下面变量:
当该布尔变量为true的时候,我们在对网格添加面片数据的时候,也会对网格碰撞的面片数据进行更新,如下图所示:
请大家注意一下,我们为网格碰撞添加面片的时候使用的是colVertices.Count,而不是vertices.Count。
那么接下来,我们为网格碰撞添加顶点,如下图所示:
好了,让我们回到“Block.cs”脚本中,修改一下网格顶点的添加方式:如下图所示:
提示
一定要将“Block.cs”原来添加顶点的方式换成转换的方式!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这样便可在useRenderDataForCol为true的时候,添加网格的顶点数据的同时也添加了网格碰撞的顶点数据,是不是既方便又简单呀。
网格碰撞的顶点数据添加好了,接下来添加网格碰撞的三角形数据的步骤和添加顶点的步骤相似。
首先处理一下添加三角形的函数,如下图所示:
提示
目前我们只使用了AddQuadTriangies()函数,上图的函数也许会在后面的开发中用的,之所以提前写上是因为该函数和本篇文章相关联。
接下来回到我们的“Block.cs”脚本的添加下面一行代码就可以跑一跑测试了:
将这行代码添上之后,按下ctrl+s,之后回到Unity点击Play按钮,将会看到如下图所示效果:
好吧,最近老被人催更,所以就花了中午的休息时候简单的弄了一下。因为也没什么难点所以基本上是一笔带过。
关于Unity墙外的世界
Unity墙外的世界 --- 这里有国外的经典案例、教程、文章,在这里你将会学到更为先进的Unity开发知识。
更新文章请进入《Unity墙外的世界》公众号中查看