Menu
CoddyTech

Dinding

Pelajaran 4 dari 14 dalam kursus Game Unity: Snake 3D di Coddy.

Sel-sel papan membentang dari -7 hingga 7 pada sumbu x dan z, jadi sebuah sel berada di papan jika nilai x dan z-nya sama-sama berada di antara -7 dan 7. Karena papan berpusat di 0, satu pengujian mencakup kedua sisi: Mathf.Abs(x) > 7 bernilai true saat melewati salah satu tepi.

Uji sel yang akan dimasuki kepala sebelum bergerak ke sana. Dengan begitu, ular yang menabrak dinding tetap berada di sel terakhir pada papan, bukan masuk ke bagian dalam batas papan. Posisi benteng pada papan catur bernomor 0 hingga 7 diperiksa dengan cara yang sama:

Vector3 target = transform.position + move;
if (target.x < 0 || target.x > 7 || target.z < 0 || target.z > 7)
{
    return;   // di luar papan: benteng tetap di tempat
}
transform.position = target;

Menabrak dinding mengakhiri permainan, dan ular berhenti selamanya. bool yang pertama kali diuji oleh Update() akan melakukannya: return di bagian atas melewati pemeriksaan tombol dan timer.

challenge icon

Tantangan

Mudah
  1. Tambahkan public int edge = 7; (sel-sel papan membentang dari -edge hingga edge) dan public bool alive = true;.
  2. Di Step(), setelah mengatur direction, tentukan next, yaitu sel yang akan dimasuki kepala ular. Jika sel tersebut berada di luar papan, panggil Die() lalu kembalikan kendali tanpa bergerak; jika tidak, pindahkan kepala ke next.
  3. Tulis void Die(), yang mengatur alive menjadi false.
  4. Awali Update() dengan return jika ular tidak hidup, agar ular yang mati tidak berbelok maupun melangkah.

Tekan Play, arahkan ular hingga menabrak dinding, lalu tekan Check.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // detik di antara dua langkah
    private float timer;
    private Vector3 direction = Vector3.right;       // arah gerak kepala pada langkah terakhirnya
    private Vector3 nextDirection = Vector3.right;   // belokan yang menunggu langkah berikutnya

    void Update()
    {
        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;
        transform.position += direction;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Snake 3D