Unity贪吃蛇游戏制作过程

萝らか妹 提交于 2020-04-06 08:21:24

成果展示

操作步骤

  1. 新建一个2D工程项目,导入资源包。新建三个文件夹,分别命名为“Scene”,“Prefebs”和“Scripts”,用于存放游戏场景,制作的预制件和脚本。
  2. 新建一个plane,命名为BackGround,附上资源包中的Ground材质。添加一个灯光,给游戏场景打光。新建一个Cube,命名为SnakeHead,附上SnakeHead材质。新建一个Cube,命名为SnakeBody,附上SnakeBody材质,并拖入Prefebs文件夹。再新建一个Cube,命名为Food,附上Food材质,拖入Prefebs文件夹,由于后期食物随机产生。在BackGround中新建四个空项目,当作游戏场景的边界,当蛇碰到边界或者自己的身体的时候,游戏结束。注意:要删去背景的Box Collider组件,否则蛇身会一直碰到背景,导致游戏无法运行。
  3. 新建一个脚本,命名为MoveSnake,通过这个脚本让贪吃蛇动起来。脚本内容如下:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using UnityEngine.SceneManagement;
    
    public class MoveSnake : MonoBehaviour
    {
        List<Transform> body = new List<Transform>();
        Vector2 direction = Vector2.up;
        public GameObject snakeBody;
        private bool flag;
        float speed = 0.3f;
    
        // Start is called before the first frame update
        void Start()
        {
            InvokeRepeating("move", speed, speed);
        }
    
        void move()
        {
            Vector2 position = transform.position;
    
            if (flag)
            {
                GameObject newBody = (GameObject)Instantiate(snakeBody, position, Quaternion.identity);
                body.Insert(0, newBody.transform);
                flag = false;
            }
            else if (body.Count>0)
            {
                body.Last().position = position;
                body.Insert(0, body.Last().transform);
                body.RemoveAt(body.Count - 1);
            }
            this.transform.Translate(direction);
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
            {
                direction = Vector2.up;
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
            {
                direction = Vector2.down;
            }
            else if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A))
            {
                direction = Vector2.left;
            }
            else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D))
            {
                direction = Vector2.right;
            }
        }
        void OnTriggerEnter(Collider coll)
        {
            if (coll.transform.CompareTag("Food"))
            {
                Destroy(coll.gameObject);
                flag = true;
            }
            else
            {
                SceneManager.LoadScene(0);
            }
        }
    }
    

    通过这个脚本可以让贪吃蛇根据按键向不同方向运动,吃掉食物并产生新的SnakeBody。将这个脚本附给SnakeBody,这个地方选择预制件文件夹中的SnakeBody,从而产生新的身体

  4. 新建一个脚本,命名为FoodCreate,用于随机生成食物。脚本内容如下:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class FoodCreate : MonoBehaviour
    {
        public GameObject snakeFood;
        public int x_limit = 30;
        public int y_limit = 20;
    
        void Food()
        {
            int x = Random.Range(-x_limit, x_limit);
            int y = Random.Range(-y_limit, y_limit);
            Instantiate(snakeFood, new Vector2(x, y), Quaternion.identity);
        }
        // Start is called before the first frame update
        void Start()
        {
            InvokeRepeating("Food", 2, 3);
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
    }
    

    将这个脚本附给摄像机,并设置摄像机视图的长度和宽度,SnakeFood选择预制件文件夹中的Food,从而在场景中随机产生食物。

  5. 新建一个场景,命名为LoadGame,用于游戏结束后重新开始游戏。场景内新建一个Text,适当修改大小和位置。在文本框输入,修改字体大小和颜色。
  6. 新建一个脚本,命名为SnakeUi,用于对场景的控制。脚本内容如下:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    
    public class SnakeUi : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                SceneManager.LoadScene(1);
            }
        }
    }
    

    该脚本用于游戏结束时弹出另一个界面,并通过单击鼠标再次进行游戏。

  7. 打开游戏场景,点击,将游戏场景设置为第一个场景。再点击游戏结束场景,设置为第二个场景。如图
  8. 调试运行。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!