尾巴
Coddy Unity 3D 贪吃蛇游戏 课程的第 7 课,共 14 课。
尾部是一个线段列表,List<Transform> tail,从紧跟在头部后面的线段 tail[0] 一直到末尾。场景在 Inspector 中设置了两段尾部,Tail1 和 Tail2,作为蛇的初始尾部。
每次移动时,每段线段都会移动到它前面那段线段所在的格子,而 tail[0] 会移动到头部所在的格子。顺序很重要。如果从前往后移动,tail[1] 会复制 tail[0] 已经移动到的格子,整个尾部就会堆在同一个格子里。如果从后往前移动,每段线段复制的都是尚未改变的格子。乘客往后挪一个座位时也是同样的道理:
string[] seats = { "Ana", "Ben", "Cy" };
for (int i = seats.Length - 1; i > 0; i--)
{
seats[i] = seats[i - 1];
}
seats[0] = "Dee"; // Dee, Ana, Ben等 tail[0] 移动到头部原来的格子后,头部最后移动。
挑战
中等让蛇拥有一条跟随头部移动的尾巴。
- 在
Snake中,添加using System.Collections.Generic;和public List<Transform> tail = new List<Transform>();(场景中会添加 Tail1 和 Tail2)。 - 在
Step()中,头部移动前,先从尾部开始,让每一节移动到前一节所在的格子;再让tail[0]移动到头部所在的格子。
按下 “开始” 并控制蛇的方向:尾巴会沿着头部走过的路径移动。然后点击 “检查”。
亲手试试
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // 每两步之间的间隔秒数
public int edge = 7; // 棋盘格子的范围从 -edge 到 edge
public bool alive = true;
private float timer;
private Vector3 direction = Vector3.right; // 蛇头上一步移动的方向
private Vector3 nextDirection = Vector3.right; // 等待下一步执行的转向
void Update()
{
if (!alive) return;
Keyboard keyboard = Keyboard.current;
if (keyboard != null)
{
if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
}
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Turn(Vector3 newDirection)
{
if (newDirection != -direction)
{
nextDirection = newDirection;
}
}
void Step()
{
direction = nextDirection;
Vector3 next = transform.position + direction;
if (Mathf.Abs(next.x) > edge || Mathf.Abs(next.z) > edge)
{
Die();
return;
}
transform.position = next;
if (GameManager.Instance.IsFood(next))
{
GameManager.Instance.Eat();
}
}
void Die()
{
alive = false;
}
}
Unity 3D 贪吃蛇游戏中的所有课
自己练习: Unity 在线编辑器