贪吃蛇核心功能是蛇的移动以及蛇的增长。
蛇的移动原理:将蛇分为2部分:蛇头和蛇身(分很多个小块),用一个脚本放于蛇头控制蛇的整体移动,脚本中使用一个列表保存蛇身物体,先移动蛇头后移动蛇身,蛇头移动很简单就只是将localPosition朝着玩家控制的方向移动一个单位即可,不过移动之前要保存原来蛇头的位置,因为第一段蛇身需要移动到这个位置。当蛇头移动后,就要遍历蛇身列表,从后往前遍历,遍历到1即可,不用到0索引,然后在遍历i时写上: sheshen[i].transform.localPosition = sheshen[i-1].transform.localPosition;后面的蛇身位置改为前面的,直到第二个蛇身位置改为第一个蛇身位置结束,遍历结束后还差第一个蛇身的位置没有移动,那就是将第一个蛇身移动到之前保存的旧蛇头位置,结束整个蛇的移动过程。代码如下:
void Move()
{
//原来头位置
headPos = gameObject.transform.localPosition;
//头位置移动之后位置
gameObject.transform.localPosition = new Vector3(headPos.x+x,headPos.y+y,headPos.z);
if (bodyList.Count > 0)
{
//将尾巴移到新头后面 即旧头位置 第一种方法移动蛇身
// bodyList.Last().localPosition = headPos;
// bodyList.Insert(0, bodyList.Last());
// bodyList.RemoveAt(bodyList.Count - 1);
//第二种方法 蛇尾到蛇身第一个结点都往前面挪动
for (int i = bodyList.Count - 1; i >= 1; i--)
{
bodyList[i].localPosition = bodyList[i - 1].localPosition;
}
//蛇身第一个结点到旧头部位置
bodyList[0].localPosition = headPos;
}
}
其中x,y是玩家所控制的移动方向的偏移单位。
而蛇的增加原理是直接实例化一个蛇身在远处 放入蛇身列表即可。放在远处的意思是实例化在玩家视野范围外,当蛇头移动后,身体会出现在视野内。
上面那个Move方法是每帧都会执行的,而控制蛇移动方向是直接改变x,y那2个值即可,如向上就是(0,-y)这样,当然有个问题就是你原本是朝下的 就不能朝上跑,只能往左、右、下跑,如果你原本朝下 突然反转180°跑的话 会撞到自身,从而导致游戏失败,对玩家不会很友好,在控制方向的时候,得加上一个判断即不能朝反方向跑。