다시 플레이
Coddy의 Unity 게임: 3D 스네이크 코스 레슨. 14개 중 12번째.
뱀이 죽으면 다시 플레이 버튼이 있는 게임 오버 패널이 나타납니다. 패널은 HUD에 있으며 처음에는 숨겨져 있고, SetActive(true)를 사용하면 표시됩니다. 뱀은 자신이 죽었을 때를 알고, 화면 관리는 GameManager가 담당하므로 Die()가 GameManager의 공개 메서드 GameOver()를 호출합니다.
다시 플레이를 누르면 씬을 다시 로드해 처음부터 시작합니다. 모든 오브젝트가 씬에 설정된 상태로 돌아옵니다. 뱀은 첫 번째 칸에 두 세그먼트가 있는 상태로, 점수는 0으로, 패널은 숨겨진 상태로 돌아옵니다. 레이싱 게임의 재시도 버튼도 같은 방식으로 연결됩니다:
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}이름으로 로드하면 버튼이 하나의 씬에 연결됩니다. SceneManager.GetActiveScene().buildIndex는 현재 실행 중인 씬이므로, 해당 씬을 로드하면 버튼이 있는 씬이 무엇이든 다시 시작됩니다. 새 씬에는 새로운 GameManager가 있으며, 이 GameManager의 Awake()가 Instance를 다시 설정하므로 새 뱀은 새로운 GameManager와 통신합니다.
챌린지
중급HUD에는 숨겨진 GameOverPanel과 PlayAgainButton이 있으며, 씬에서 둘 다 GameManager에 설정합니다.
GameManager에using UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;및public Button playAgainButton;을 추가합니다.- 패널을 표시하는
public void GameOver()를 작성합니다. - 활성 씬을 다시 불러오는
void PlayAgain()을 작성하고,Start()에서 버튼이 이를 호출하도록 합니다. Snake의Die()에서GameOver()를 호출합니다.
Play를 누르고, 충돌한 다음 다시 플레이한 뒤 Check를 누릅니다.
직접 해보기
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)];
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.