Main Lagi
Pelajaran 12 dari 14 dalam kursus Game Unity: Snake 3D di Coddy.
Saat ular mati, panel Game Over muncul dengan tombol Play Again. Panel ini berada di HUD dan awalnya tersembunyi, lalu SetActive(true) menampilkannya. Ular tahu kapan ia mati, dan GameManager mengelola layar, jadi Die() memanggil GameOver() publik pada GameManager.
Play Again memulai ulang dengan memuat scene lagi. Setiap object kembali seperti kondisi scene: ular berada di sel pertamanya dengan dua segmen, skor 0, dan panel tersembunyi. Tombol Retry di game balapan dihubungkan dengan cara yang sama:
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}Memuat berdasarkan nama menghubungkan tombol ke satu scene. SceneManager.GetActiveScene().buildIndex adalah scene yang sedang berjalan, jadi memuatnya akan memulai ulang scene tempat tombol itu berada. Scene baru memiliki GameManager baru, yang Awake()-nya mengatur Instance lagi, sehingga ular baru berkomunikasi dengan GameManager baru.
Tantangan
SedangHUD memiliki GameOverPanel tersembunyi dengan PlayAgainButton, dan scene menetapkan keduanya pada GameManager.
- Di
GameManager, tambahkanusing UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;danpublic Button playAgainButton;. - Tulis
public void GameOver(), yang menampilkan panel. - Tulis
void PlayAgain(), yang memuat scene aktif lagi, lalu diStart(), buat tombol memanggilnya. - Di
Die()milikSnake, panggilGameOver().
Tekan Play, tabrak sesuatu, main lagi, lalu tekan Check.
Coba sendiri
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Snake snake;
public GameObject foodPrefab;
public TMP_Text scoreText;
private Transform food;
private int score;
void Awake()
{
Instance = this;
}
void Start()
{
scoreText.text = "Score: 0";
food = Instantiate(foodPrefab).transform;
MoveFood();
}
public bool IsFood(Vector3 cell)
{
return cell == food.position;
}
public void Eat()
{
score++;
scoreText.text = "Score: " + score;
MoveFood();
}
void MoveFood()
{
List<Vector3> free = new List<Vector3>();
for (int x = -snake.edge; x <= snake.edge; x++)
{
for (int z = -snake.edge; z <= snake.edge; z++)
{
Vector3 cell = new Vector3(x, 0f, z);
if (!snake.Occupies(cell))
{
free.Add(cell);
}
}
}
food.position = free[Random.Range(0, free.Count)];
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.