当前位置:   article > 正文

Unity实现简单贪吃蛇_unity如何让游戏物体变长

unity如何让游戏物体变长

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

代码下载

蛇头的实现:

制作一个红色cube立方体,控制着蛇的运动方向,以及遇到食物吃掉食物的功能。

在Update()里 WSAD及方向键控制着蛇头的运动方向。且在蛇头向上运动的时候不能向下运动,蛇在向左运动时候不能向右运动。
  1. void Update () {
  2. if (Input.GetKey(KeyCode.W)||Input.GetKey("up")&&direction!= Vector2.down)
  3. {
  4. direction = Vector2.up;
  5. }
  6. if (Input.GetKey(KeyCode.S) || Input.GetKey("down") && direction != Vector2.up)
  7. {
  8. direction = Vector2.down;
  9. }
  10. if (Input.GetKey(KeyCode.A) || Input.GetKey("left") && direction != Vector2.right)
  11. {
  12. direction = Vector2.left;
  13. }
  14. if (Input.GetKey(KeyCode.D) || Input.GetKey("right") && direction != Vector2.left)
  15. {
  16. direction = Vector2.right;
  17. }
  18. }


蛇在碰撞上食物后,身体会增长一节。遇到食物的时候,会先毁灭掉食物,再增加自己身体的长度。这个时候设置的碰撞位flag就会变为true,身体长度会增加。但是,在碰到自己的时候,以及在遇到墙壁的时候都会死亡,这个时候就会导入进开始时候的场景。

  1. void OnTriggerEnter(Collider other)
  2. {
  3. if (other.gameObject.CompareTag("Food"))
  4. {
  5. //Debug.Log("撞上了!");
  6. Destroy(other.gameObject);
  7. flag = true;
  8. }
  9. else
  10. {
  11. //SceneManager.LoadScene(0)
  12. Application.LoadLevel(1);
  13. }
  14. }

身体的部分:

身体每次增长的算法便是贪吃蛇的难点,网上很多算法是利用list链表来实现的,用链表的节点表示蛇 增加的减少都有很方便 移动的时候只须增加一个头节点,并去掉尾节点就行了, 吃食物是只须增加一个头节点 。
这种算法绝对的巧妙,但是网上太多的缘故,下面由链表来实现另一种贪吃蛇算法。蛇头保持不动,身体的最后一个移到最前,之后在慢慢向后移动。

其中下面的蓝色方块(身体部分的一个设定)一步一步运动,便可以看出来这个效果。



下面贴出蛇身体部分的代码。如果食物被吃,标志位flag为true,这个是在蛇身体上插入一个预制体的Cube,蛇身体会边长。当没有吃到食物的时候,这个时候就会看身体的数量,当数量大于0的时候,会把最后的一个放到最前面,依次循环,直到最后。
  1. void Move()
  2. {
  3. Vector3 VPosition = transform.position;
  4. transform.Translate(direction);
  5. if (flag)
  6. {
  7. GameObject bodyPrefab = (GameObject)Instantiate(gameObjecgtBody, VPosition, Quaternion.identity);
  8. Body.Insert(0, bodyPrefab.transform);
  9. flag = false;
  10. }
  11. else if (Body.Count > 0)
  12. {
  13. Body.Last().position = VPosition;
  14. Body.Insert(0, Body.Last());
  15. Body.RemoveAt(Body.Count - 1);
  16. }
  17. }

食物的出现:

食物的出现是一个随机的过程,在这个时候,在随机的位置出现食物InvokeRepeating("ShowFood", 1, 4);表示四秒的时候会调用ShowFood()函数,这个时候在ShowFood里会随机出现食物。
下面是ShowFood()函数的代码

  1. void ShowFood()
  2. {
  3. int x = Random.Range(-30, 30);
  4. int y = Random.Range(-22, 22);
  5. Instantiate(SSFood, new Vector2(x,y), Quaternion.identity);
  6. }



特别注意一下就是,在制作蛇头和身体的时候,设置碰撞体的东西如果把碰撞体的体积设为单位1的话,在蛇身体的侧面也会撞到食物,触发碰撞器的。所以设置碰撞体的体积为0.8,略小于1的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/146363
推荐阅读
相关标签
  

闽ICP备14008679号