Menu
CoddyTech

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] 클래스로 감싸고, 그런 클래스의 목록을 만드세요.

challenge icon

챌린지

쉬움

Mira와 Tom의 대화를 한 번에 한 줄씩 보여 주세요.

  1. [System.Serializable] 클래스 Line을 선언하고, 공개 문자열 speaker와 text를 포함한 뒤 public List<Line> lines;를 추가하세요.
  2. 시작할 때 lines[0]을 표시하세요. 화자는 speakerText에, 텍스트는 lineText에 표시합니다.
  3. 스페이스바를 누르면 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 플레이그라운드