Menu
CoddyTech

오브젝트 목록

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 85개 중 65번째.

배열은 만들어질 때 길이가 정해져 고정됩니다. 스포너는 미리 몇 개의 객체를 만들지 알 수 없으므로, 객체를 커지는 C# 배열인 List<T>에 담아 둡니다. 이 목록은 System.Collections.Generic에 있으며, T는 목록이 담는 항목의 형식입니다. 이 분수대는 자신이 만드는 동전을 모두 기억합니다.

using System.Collections.Generic;
using UnityEngine;

public class CoinFountain : MonoBehaviour
{
    public GameObject coinPrefab;
    List<GameObject> coins = new List<GameObject>();

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
            coins.Add(coin);
            Debug.Log(coins.Count + " coins");
        }
    }
}

Add는 항목을 끝에 추가하고, 배열에서 Length를 사용하는 것과 달리 Count는 항목이 몇 개 있는지 알려 줍니다. 항목을 읽는 방법은 배열과 같습니다. coins[0]은 첫 번째 동전이고, foreach (GameObject c in coins)는 모든 동전을 차례로 방문합니다. coins.Remove(coin)은 해당 항목을 제거하고, coins.RemoveAt(0)은 첫 번째 항목을 제거합니다. 그 뒤의 항목들은 한 칸씩 앞으로 이동합니다.

목록 자체는 new로 만들어야 합니다. List<GameObject> coins;처럼 필드를 선언하면 null을 담게 되고, 처음 Add를 호출할 때 NullReferenceException이 발생합니다.

challenge icon

챌린지

중급

클릭할 때마다 상자 하나를 목록에 추가하세요.

  1. using System.Collections.Generic;와 필드 List<GameObject> boxes = new List<GameObject>();를 추가하세요.
  2. 클릭하면 회전 없이 transform.position + new Vector3(boxes.Count * 1.5f, 0, 0) 위치에 boxPrefab을 생성하고 boxes에 추가하세요.
  3. "Boxes: " + boxes.Count를 로그로 출력하세요.

‘플레이’를 누르고 세 번 클릭하세요. 상자 세 개가 일렬로 놓입니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: 비공개 List<GameObject>

    void Update()
    {
        // Click: 상자를 생성하고, 목록에 있는 상자마다 오른쪽으로 1.5씩 더 이동시킨 뒤, 목록에 추가하고 개수를 로그에 기록
    }
}

Unity 스크립팅 기초의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드