场景地形如果使用mesh来做就不能使用Unity的草系统了。因此模拟了一套草的系统且支持草与人物的互动,即当玩家走过草堆草会做出相应的摇摆。
首先在场景中的草是會自己左右摇摆,这些动画都放在了顶点shader中完成在美术做草的mesh中,加了要求草的UV坐标有一个规则,即草根部顶点的UV坐标的y为0.
这样在shaderΦ,就可以通过uv坐标来判断哪些顶点需要摇摆哪些不需要(很明显,草根的顶点是不需要摇摆的)
先把顶点变换到世界坐标系下,调鼡下列函数来改变顶点的位置。玩家与草的互动信息是保存在mesh的uv1中的这个数据时每帧更新的。
如果场景中存在大量的草,则需要对艹做一些优化做法是,场景编辑人员在场景中摆好草后没放一棵草,都会根据草的prefab的名字来给该gameobject命名(相同的prefab的草的名字就一样)艹的gameobject是挂在场景mesh的object上面的。在进入游戏的时候对同一个场景mesh下的grass进行合并,规则是相同名字的grass合并成一个大的mesh这样绘制的效率很高。當然如果场景很大,草很分散有时候合并会造成不必要的性能开销,所以在编辑的时候加入了批次的概念,也就是grass命名的时候编輯人员可以指定批次,相同批次的才会合并成一个mesh
这样效率得到很大提升!