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.
Tantangan
Mudah- Tambahkan
public int edge = 7;(sel-sel papan membentang dari-edgehinggaedge) danpublic bool alive = true;. - Di
Step(), setelah mengaturdirection, tentukannext, yaitu sel yang akan dimasuki kepala ular. Jika sel tersebut berada di luar papan, panggilDie()lalu kembalikan kendali tanpa bergerak; jika tidak, pindahkan kepala kenext. - Tulis
void Die(), yang mengaturalivemenjadi false. - 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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.