안 쓰던 블로그

unity 스크립트로 이루어진 배열 만들기(Make an array of scripts) 본문

유니티/개발

unity 스크립트로 이루어진 배열 만들기(Make an array of scripts)

proqk 2020. 2. 12. 15:25
반응형

방금 알게 된 사실 기록

 

박스 객체 6개를 관리하는 BoxManager.cs가 있음

근데 각 박스마다 박스 매니저를 만들고 싶진 않고, GameManager에서 BoxManager 6개를 배열로 만들고 싶다

 

일반 C# 프로그램을 생각해서 짠다면 이렇게 됨

public class GameManager : MonoBehaviour
{
    public BoxManager[] bm; //박스 매니저

    void Start()
    {
        bm = new BoxManager[6]; //박스 6개로 초기화
        for(int i = 0; i < 6; i++)
        {
            bm[i] = new BoxManager();
            bm[i].me = i + 1;
        }
    }
}

하지만 유니티에서는 이러면 안 됨

 

아름다운 경고문 목록을 보게 될 것이다

 

왜이러나 찾아봤더니, BoxManager는 각 Box객체에 붙어야하기 때문에 MonoBehaviour를 상속 받고 있는데

MonoBehaviour 클래스를 상속한 클래스는 new연산자로 인스턴스화 할 수 없음

왜냐하면 new로 MonoBehaviour클래스를 오브젝트로 생성하면

게임 실행 시 이것저것 초기화하고 게임 오브젝트에 추가하는 과정을 전부 생까고 먼저 만들어버리기 때문에 제대로 동작하지 않기 때문

 

그러면 어떻게 하면 되나?

여러가지 방법이 있지만 간단하게 이렇게만 바꿔주면 되다

 

public class GameManager : MonoBehaviour
{
    public BoxManager[] bm; //박스 매니저

    void Start()
    {
        bm = new BoxManager[6]; //박스 6개로 초기화
        for(int i = 0; i < 6; i++)
        {
            bm[i] = GetComponent<BoxManager>();
            bm[i].me = i + 1;
        }
    }
}

깔-끔

반응형
Comments