Inspector의 리스트
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 19번째.
[System.Serializable] 항목의 목록은 Inspector에서 채우는 표입니다. 이 경비병은 경로의 정류장을 따라 이동하며 각 항목에 다음과 같이 적혀 있는 동안 그곳에서 기다립니다.
[System.Serializable]
public class Stop
{
public Transform point;
public float wait = 1f;
}
public class Patrol : MonoBehaviour
{
public float speed = 3f;
public List<Stop> stops;
private int current;
private float waited;
void Update()
{
Stop stop = stops[current];
transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
if (transform.position != stop.point.position) return;
waited += Time.deltaTime;
if (waited >= stop.wait)
{
waited = 0f;
current = (current + 1) % stops.Count;
}
}
}Inspector에는 개수와 항목별 접이식 메뉴가 표시된 Stops가 나타납니다. Element 0, Element 1 등이 각각 Point와 Wait를 포함합니다. + 버튼은 항목을 추가하고, 빼기 버튼은 선택한 항목을 제거하며, 행 왼쪽의 핸들을 드래그하면 경로에서 새 위치로 옮길 수 있습니다. 코드는 평소처럼 목록을 읽습니다. stops.Count개의 항목이 있고, stops[current].point를 참조하며, (current + 1) % stops.Count는 마지막 정류장 다음에 첫 번째 정류장으로 돌아갑니다. 레벨 디자이너는 스크립트를 건드리지 않고 한 경비병에게는 정류장 세 개를, 다른 경비병에게는 열 개를 설정할 수 있습니다.
배열인 public Stop[] stops;도 같은 방식으로 표시됩니다. Unity의 + 버튼은 마지막 항목을 복사하므로 새 정류장은 바로 위 항목과 같은 지점 및 대기 시간을 갖고 시작합니다. Unity는 List<List<Stop>>와 같은 목록의 목록이나 Dictionary를 표시하거나 저장하지 않습니다. 대신 내부 목록을 Route처럼 자체 List<Stop>을 가진 [Serializable] 클래스로 감싸고, 그런 클래스의 목록을 만드세요.
챌린지
쉬움Mira와 Tom의 대화를 한 번에 한 줄씩 보여 주세요.
[System.Serializable]클래스Line을 선언하고, 공개 문자열speaker와text를 포함한 뒤public List<Line> lines;를 추가하세요.- 시작할 때
lines[0]을 표시하세요. 화자는speakerText에, 텍스트는lineText에 표시합니다. - 스페이스바를 누르면
lines.Count까지 다음 줄을 표시합니다. 마지막 줄 다음에는box를 숨기고Dialogue over를 로그에 출력하세요. 그 후 스페이스바를 눌러도 아무 일도 일어나지 않습니다.
‘플레이’를 누르고 스페이스바를 눌러 읽으세요. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class Dialogue : MonoBehaviour
{
public GameObject box;
public TMP_Text speakerText;
public TMP_Text lineText;
void Start()
{
// 첫 번째 대사를 표시한다
}
void Update()
{
// Space: 다음 대사로 넘어가거나 대화를 끝낸다
}
}
Unity 게임 아키텍처의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드