게임 상태
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 14번째.
게임은 한 번에 하나의 상태에 있습니다. 플레이어를 기다리는 중이거나, 실행 중이거나, 종료된 상태입니다. isPlaying과 isOver 같은 bool 변수 두 개는 실수로 둘 다 true가 될 수 있고, "Playng" 같은 문자열은 컴파일은 되지만 일치하는 경우가 없습니다. C#에는 고정된 선택지 목록을 위한 형식인 enum이 있습니다. 이 횡단보도 신호등은 enum을 사용합니다.
public enum Signal { Red, Yellow, Green }
public class Crossing : MonoBehaviour
{
public Signal signal;
void Update()
{
if (signal == Signal.Red && Input.GetMouseButtonDown(0))
{
signal = Signal.Green;
Debug.Log("Walk!");
}
}
public bool CanWalk()
{
return signal == Signal.Green;
}
}enum Signal { Red, Yellow, Green }은 정확히 세 가지 값을 가진 새 형식을 만듭니다. 이 값은 Signal.Red, Signal.Yellow, Signal.Green으로 작성합니다. Signal 필드는 한 번에 이 값 중 하나를 가집니다. ==로 값을 비교하고 =로 값을 변경합니다. 철자가 틀린 Signal.Gren은 컴파일 오류이므로 Play를 누르기 전에 실수를 알 수 있습니다.
enum은 클래스 바깥에 선언되므로 모든 스크립트에서 Signal을 사용할 수 있고, 보행자의 스크립트에서 crossing.CanWalk()를 호출할 수 있습니다. 새 enum 필드는 첫 번째 값으로 시작합니다. 여기서는 Red입니다. Inspector에서 public enum 필드는 값의 드롭다운 목록으로 표시됩니다. 내부적으로 각 값은 0부터 세는 숫자입니다. (int)Signal.Green은 2입니다.
챌린지
쉬움용암에 닿지 않고 바닥을 건너세요. GameManager(싱글톤)와 Lava 스크립트는 준비되어 있습니다. 게임 상태를 추가하세요.
GameManager.cs에서 클래스 위에Ready,Playing,GameOver값을 순서대로 갖는 열거형GameState를 선언하고,GameManager에state라는 이름의 공개GameState필드를 추가하세요. 게임은 Ready 상태로 시작합니다.- 게임이 Ready 상태일 때 Space를 누르면 게임이 시작됩니다. 상태가 Playing이 되고
Go!가 로그에 기록됩니다. - Lava는
HitLava()를 호출합니다. 게임이 Playing 상태일 때 게임이 종료됩니다. 상태가 GameOver가 되고Game over가 로그에 기록됩니다. Space를 눌러도 종료된 게임은 다시 시작되지 않습니다. Player.cs에서 게임 상태가 Playing일 때만 방향키로 플레이어를 움직이세요.
Play를 누르고, Space를 누르기 전에 방향키를 사용해 보세요. 그런 다음 용암에 들어가고 Check를 누르세요.
직접 해보기
using UnityEngine;
// 여기에 GameState enum을 선언하세요: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// 이름이 state인 public GameState 필드
void Awake()
{
Instance = this;
}
void Update()
{
// Ready 상태에서 Space를 누르면 게임이 시작되고 Go!가 로그에 출력됩니다
}
public void HitLava()
{
// Playing 상태에서 게임이 종료되면 Game over를 로그에 출력합니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.