Unity实现简单贪吃蛇

    xiaoxiao2021-03-26  33

    贪吃蛇 游戏是一款经典的手机游戏,既简单又耐玩。通过控制蛇头方向吃蛋,使得蛇变长,从而获取积分。

    代码下载

    蛇头的实现:

    制作一个红色cube立方体,控制着蛇的运动方向,以及遇到食物吃掉食物的功能。 在Update()里 WSAD及方向键控制着蛇头的运动方向。且在蛇头向上运动的时候不能向下运动,蛇在向左运动时候不能向右运动。 void Update () { if (Input.GetKey(KeyCode.W)||Input.GetKey("up")&&direction!= Vector2.down) { direction = Vector2.up; } if (Input.GetKey(KeyCode.S) || Input.GetKey("down") && direction != Vector2.up) { direction = Vector2.down; } if (Input.GetKey(KeyCode.A) || Input.GetKey("left") && direction != Vector2.right) { direction = Vector2.left; } if (Input.GetKey(KeyCode.D) || Input.GetKey("right") && direction != Vector2.left) { direction = Vector2.right; } } 蛇在碰撞上食物后,身体会增长一节。遇到食物的时候,会先毁灭掉食物,再增加自己身体的长度。这个时候设置的碰撞位flag就会变为true,身体长度会增加。但是,在碰到自己的时候,以及在遇到墙壁的时候都会死亡,这个时候就会导入进开始时候的场景。 void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Food")) { //Debug.Log("撞上了!"); Destroy(other.gameObject); flag = true; } else { //SceneManager.LoadScene(0) Application.LoadLevel(1); } }

    身体的部分:

    身体每次增长的算法便是贪吃蛇的难点,网上很多算法是利用list链表来实现的,用链表的节点表示蛇 增加的减少都有很方便 移动的时候只须增加一个头节点,并去掉尾节点就行了, 吃食物是只须增加一个头节点 。 这种算法绝对的巧妙,但是网上太多的缘故,下面由链表来实现另一种贪吃蛇算法。蛇头保持不动,身体的最后一个移到最前,之后在慢慢向后移动。 其中下面的蓝色方块(身体部分的一个设定)一步一步运动,便可以看出来这个效果。 下面贴出蛇身体部分的代码。如果食物被吃,标志位flag为true,这个是在蛇身体上插入一个预制体的Cube,蛇身体会边长。当没有吃到食物的时候,这个时候就会看身体的数量,当数量大于0的时候,会把最后的一个放到最前面,依次循环,直到最后。 void Move() { Vector3 VPosition = transform.position; transform.Translate(direction); if (flag) { GameObject bodyPrefab = (GameObject)Instantiate(gameObjecgtBody, VPosition, Quaternion.identity); Body.Insert(0, bodyPrefab.transform); flag = false; } else if (Body.Count > 0) { Body.Last().position = VPosition; Body.Insert(0, Body.Last()); Body.RemoveAt(Body.Count - 1); } }

    食物的出现:

    食物的出现是一个随机的过程,在这个时候,在随机的位置出现食物InvokeRepeating("ShowFood", 1, 4);表示四秒的时候会调用ShowFood()函数,这个时候在ShowFood里会随机出现食物。 下面是ShowFood()函数的代码 void ShowFood() { int x = Random.Range(-30, 30); int y = Random.Range(-22, 22); Instantiate(SSFood, new Vector2(x,y), Quaternion.identity); } 特别注意一下就是,在制作蛇头和身体的时候,设置碰撞体的东西如果把碰撞体的体积设为单位1的话,在蛇身体的侧面也会撞到食物,触发碰撞器的。所以设置碰撞体的体积为0.8,略小于1的。 代码下载
    转载请注明原文地址: https://ju.6miu.com/read-350337.html

    最新回复(0)