Menu
CoddyTech

오브젝트 목록

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

배열은 고정된 길이를 가지며, 만들 때 길이가 정해집니다. 스포너는 앞으로 몇 개의 오브젝트를 만들지 미리 알 수 없으므로, 오브젝트들을 늘어나는 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는 항목을 끝에 추가하고, Count는 항목이 몇 개인지 알려줍니다. 배열에서는 Length를 사용합니다. 배열과 마찬가지로 읽을 수 있습니다. coins[0]은 첫 번째 동전이고, foreach (GameObject c in coins)는 모든 동전을 차례로 방문합니다. coins.Remove(coin)은 해당 항목을 제거하고, coins.RemoveAt(0)은 첫 번째 항목을 제거합니다. 그 뒤의 항목들은 한 칸씩 앞으로 이동합니다.

목록 자체는 new를 사용해 만들어야 합니다. List<GameObject> coins;라고 필드를 선언하면 null을 담게 되고, 첫 번째 Add에서 NullReferenceException이 발생하며 실행이 멈춥니다.

challenge icon

챌린지

중급

Stacker는 자신이 생성한 상자들을 추적해야 합니다:

  • 상자들을 boxes라는 이름의 비공개 List<GameObject> 필드에 보관합니다.
  • 클릭할 때마다 회전 없이 상자를 생성하고 목록에 추가합니다. 상자는 스태커의 위치에서 시작해 목록에 이미 있는 상자 하나당 x축으로 1.5만큼 더 떨어진 곳에 놓입니다. 첫 번째 상자는 스태커 위치에, 다음 상자는 그 오른쪽으로 1.5만큼 떨어진 곳에 놓이는 식입니다.
  • Space 키를 누르면 가장 최근에 생성된 상자를 되돌립니다. SetActive(false)로 상자를 숨기고 목록에서 제거합니다. 상자가 없으면 Space 키를 눌러도 아무 일도 일어나지 않습니다.
  • 목록이 변경될 때마다 Boxes: 와 개수를 로그로 출력합니다. 예를 들면 Boxes: 3입니다.

Play를 누르고 클릭한 다음 Space 키를 누른 뒤, Check를 누르세요.

직접 해보기

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: private List<GameObject>

    void Update()
    {
        // Click: 리스트에 있는 상자 하나당 오른쪽으로 1.5씩 더 떨어진 위치에 상자를 생성하고 리스트에 추가
        // Space: 가장 최근에 생성한 상자를 숨기고 리스트에서 제거
        // 변경할 때마다 "Boxes: "와 상자 수를 로그에 기록
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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