본문 바로가기

Unity

콘텐츠 초기화

콘텐츠를 제작하다보면, 하이어라키 구조로 콘텐츠의 단계를 구분하는 경우가 매우 많다.


현재 진행중인 단계에서 다른 단계로 이동시, 현재 단계의 상태를 유지 하는 것은 매우 쉽다. (그냥 놔두면 되니까)


문제는 다른 단계로 이동시, 초기화가 필요한 경우가 종종 있다.


해당 단계의 루트 게임오브젝트가 시작(Start)될 때에 Child게임오브젝트들의 모든 Active상태의 초기화 값을 별도로 저장해 놓는 두개의 구조체를 만들어 쓰는데 다음과 같다.



[Serializable]

public struct DefaultSetting

{

    public ObjectUnit[] UnitObjects;


    public void ResetAllUnitSetting()

    {

        foreach (var item in UnitObjects)

        {

            item.reset();

        }

    }


    public void ResetUnitObjectSetting(Int16 index)

    {

        UnitObjects[index].reset();

    }


    public void SetActiveAll(bool bo)

    {

        foreach (var item in UnitObjects)

        {

            item.MyAllChilds.SetActive(bo);

        }

    }

}


[Serializable]

public struct ObjectUnit

{

    [HideInInspector]

    public string ObjectName;

    [HideInInspector]

    public GameObject MyAllChilds;

    [HideInInspector]

    public bool isActive;


    public void reset()

    {

        MyAllChilds.SetActive(isActive);

    }

}