Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

HUD memiliki GameOverPanel tersembunyi dengan PlayAgainButton, dan scene menetapkan keduanya pada GameManager.

  1. Di GameManager, tambahkan using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; dan public Button playAgainButton;.
  2. Tulis public void GameOver(), yang menampilkan panel.
  3. Tulis void PlayAgain(), yang memuat scene aktif lagi, lalu di Start(), buat tombol memanggilnya.
  4. Di Die() milik Snake, panggil GameOver().

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)];
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Snake 3D