오브젝트 목록
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이 발생합니다.
챌린지
중급클릭할 때마다 상자 하나를 목록에 추가하세요.
using System.Collections.Generic;와 필드List<GameObject> boxes = new List<GameObject>();를 추가하세요.- 클릭하면 회전 없이
transform.position + new Vector3(boxes.Count * 1.5f, 0, 0)위치에boxPrefab을 생성하고boxes에 추가하세요. "Boxes: " + boxes.Count를 로그로 출력하세요.
‘플레이’를 누르고 세 번 클릭하세요. 상자 세 개가 일렬로 놓입니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: 비공개 List<GameObject>
void Update()
{
// Click: 상자를 생성하고, 목록에 있는 상자마다 오른쪽으로 1.5씩 더 이동시킨 뒤, 목록에 추가하고 개수를 로그에 기록
}
}
Unity 스크립팅 기초의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드