Menu
CoddyTech

吃

Coddy Unity 3D 贪吃蛇游戏 课程的第 6 课,共 14 课。

蛇头走到食物所在的格子时,蛇就会吃掉食物。它们的位置都是整数,因此用 == 比较位置是安全的:Unity 中 Vector3 的 == 会在两个位置相距小于 0.00001 时将它们视为相等,而整数格子的相加不会产生这么小的间隙。

蛇知道自己何时移动,而 GameManager 知道食物的位置并负责记录分数。因此,每次移动后,蛇都会询问,GameManager 则会回答:IsFood(cell) 会返回一个 bool,而 Eat() 会加 1 分并移动食物。蛇通过静态的 Instance 访问 GameManager,这是你在 C# for Unity 学习旅程中认识过的单例。

移动后,检查蛇头进入的格子。拾取网格上的钥匙也是一样的做法:

transform.position = next;
if (key.position == transform.position)
{
    keysHeld++;
    key.gameObject.SetActive(false);
}
challenge icon

挑战

中等

蛇吃掉食物并得 1 分。

  1. 在 GameManager 中,添加 public static GameManager Instance;,并在 Awake() 中设置它,还要添加 private int score;
  2. public bool IsFood(Vector3 cell):当 cell 是食物所在的位置时返回 true。public void Eat():分数加 1,然后调用 MoveFood()。
  3. 在 Snake 的 Step() 末尾:如果 GameManager.Instance.IsFood(next),就调用 Eat()。

按下“开始”,控制蛇移动到食物上:食物会跳到一个新格子。然后点击“检查”。

亲手试试

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public Snake snake;
    public GameObject foodPrefab;
    private Transform food;

    void Start()
    {
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    void MoveFood()
    {
        int x = Random.Range(-snake.edge, snake.edge + 1);
        int z = Random.Range(-snake.edge, snake.edge + 1);
        food.position = new Vector3(x, 0f, z);
    }
}

Unity 3D 贪吃蛇游戏中的所有课

自己练习: Unity 在线编辑器