Ekor
Pelajaran 7 dari 14 dalam kursus Game Unity: Snake 3D di Coddy.
Ekor adalah list segmen, List<Transform> tail, mulai dari segmen yang berada tepat di belakang kepala, tail[0], hingga ujungnya. Scene memulai ular dengan dua segmen, Tail1 dan Tail2, yang diatur di Inspector.
Pada setiap langkah, setiap segmen berpindah ke sel yang ditempati segmen di depannya, dan tail[0] berpindah ke sel kepala. Urutannya penting. Jika dimulai dari depan, tail[1] akan menyalin sel yang sudah ditempati tail[0], sehingga seluruh ekor akan menumpuk di satu sel. Jika dimulai dari belakang, setiap segmen menyalin sel yang belum berubah. Penumpang yang berpindah satu kursi ke belakang bekerja dengan cara yang sama:
string[] seats = { "Ana", "Ben", "Cy" };
for (int i = seats.Length - 1; i > 0; i--)
{
seats[i] = seats[i - 1];
}
seats[0] = "Dee"; // Dee, Ana, BenKepala bergerak terakhir, setelah tail[0] berpindah ke sel yang sebelumnya ditempati kepala.
Tantangan
Sedang- Tambahkan
using System.Collections.Generic;danpublic List<Transform> tail = new List<Transform>();. Scene mengisinya dengan Tail1 dan Tail2. - Di
Step(), tepat sebelum kepala bergerak, gerakkan bagian ekor: setiap segmen, mulai dari belakang, mengambil sel segmen di depannya, dantail[0]mengambil sel kepala.
Tekan Play dan arahkan: ekor mengikuti jalur kepala. Lalu tekan Check.
Coba sendiri
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // detik antara dua langkah
public int edge = 7; // sel-sel papan membentang dari -edge hingga edge
public bool alive = true;
private float timer;
private Vector3 direction = Vector3.right; // arah gerak kepala pada langkah terakhirnya
private Vector3 nextDirection = Vector3.right; // arah belok yang menunggu langkah berikutnya
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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.