같은 GameObject(Prefab)를 여러개 만들때 관리 방법
유니티를 공부하다가 wall을 여러개 만들고 SetActive()를 사용해서 비활성화 후
시간에 따라 벽을 차례대로 활성화 시키려고 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using UnityEngine; using System.Collections; public class MakeWall_Enable : MonoBehaviour { // Use this for initialization public GameObject prefab; void Start () { for(int i=0; i<5;i++){ Instantiate(prefab, new Vector3 (0, Random.Range (-10.0f, 10.0f), 0), Quaternion.identity); prefab.SetActive (false); } } // Update is called once per frame void Update () { } } | cs |
위 코드를 작성하고 나니 각 프리팹을 어찌 컨트롤 할지 고민이라 하나의 리스트를 만들려고 했다.
..사실
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using UnityEngine; using System.Collections; public class MakeWall_Enable : MonoBehaviour { // Use this for initialization public GameObject[] prefab = new GameObject[5]; void Start () { for(int i=0; i<5;i++){ Instantiate(prefab[i], new Vector3 (0, Random.Range (-10.0f, 10.0f), 0), Quaternion.identity); prefab[i].SetActive (false); } } // Update is called once per frame void Update () { } } | cs |
이렇게 작성했더니
Out of Range 오류를 내뱉어서 황당했다.
stackoverflow에 들어가 검색을 해봤더니 이러한 현상을 가진 분들을 많이 봤다.
해결방법도 많아보였지만 현재 내가 배운 지식으로는 어림도 없을 것 같아서 간단한 방법을 사용했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using UnityEngine; using System.Collections; using System.Collections.Generic; public class MakeWall_Enable : MonoBehaviour { // Use this for initialization public GameObject prefab; List<GameObject> wallList = new List<GameObject>(); void Start () { for(int i=0; i<5;i++){ Instantiate(prefab, new Vector3 (0, Random.Range (-10.0f, 10.0f), 0), Quaternion.identity); wallList.Add (prefab.gameObject); prefab.SetActive (false); } } // Update is called once per frame void Update () { } } | cs |
List를 하나 만들어서 프리팹을 관리하는 법이다.
SetActive를 하면 Fine("")함수로는 찾을 수 없어서 애초에 prefab을 생성하면서 List에 추가 해줬다.