场景地形如果使用mesh来做,就不能使用Unity的草系统了。因此模拟了一套草的系统,且支持草与人物的互动,即当玩家走过草堆,草会做出相应的摇摆。
首先,在场景中的草是会自己左右摇摆,这些动画都放在了顶点shader中完成。在美术做草的mesh中,加了要求。草的UV坐标有一个规则,即草根部顶点的UV坐标的y为0.
这样,在shader中,就可以通过uv坐标来判断哪些顶点需要摇摆,哪些不需要(很明显,草根的顶点是不需要摇摆的)。
先把顶点变换到世界坐标系下,调用下列函数,来改变顶点的位置。玩家与草的互动信息是保存在mesh的uv1中的,这个数据时每帧更新的。
float4 GrassRock(float4 pos, float2 uv, float2 uv1 float dir)
{
if (uv.y > 0.99)
{
float windx = 0;
float windz = 0;
if ( dir >0 )