Menu
CoddyTech

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, Ben

Kepala bergerak terakhir, setelah tail[0] berpindah ke sel yang sebelumnya ditempati kepala.

challenge icon

Tantangan

Sedang
  1. Tambahkan using System.Collections.Generic; dan public List<Transform> tail = new List<Transform>();. Scene mengisinya dengan Tail1 dan Tail2.
  2. Di Step(), tepat sebelum kepala bergerak, gerakkan bagian ekor: setiap segmen, mulai dari belakang, mengambil sel segmen di depannya, dan tail[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;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Snake 3D