吃
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);
}挑战
中等蛇吃掉食物并得 1 分。
- 在
GameManager中,添加public static GameManager Instance;,并在Awake()中设置它,还要添加private int score; public bool IsFood(Vector3 cell):当 cell 是食物所在的位置时返回 true。public void Eat():分数加 1,然后调用MoveFood()。- 在
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 在线编辑器