유니티

UI Panel, Prefab으로 지정하여 모든 Scene에서 로딩

HorseDragon 2023. 3. 27. 16:50

WavePanels를 Prefab으로 만들어둔다.

이후, 불러오기 위해서는 Resources 경로에다가 저장해둔다.

 

Script에서 GameObject로 WavePanels을 지정한다음, Start에서 Instantiate로 WavePanels Prefab을 불러온다.

이때, UI이기 때문에 SetParent를 이용해서, 부모 Canvas를 지정해준다.

여기서는 "PopUpCanvas"라는 부모를 두고, WavePanels를 자식으로 지정해줌.

다음에 WavePanels의 위치를 조정해주기 위해서 .GetComponent<RectTransform>()을 이용한다.

위치의 경우 anchoredPosition을 이용하여 (0,0,0) = Vector3.zero 에 위치시킨다.

지맘대로 Scale이 변하는 문제도 있었기 때문에, localScale = new Vector3(1,1,1) 정해준다.

 

해당 스크립트를 이용하면, 어떤 Scene에서든 원할 때 WavePanels를 불러올 수 있다.

private GameObject WavePanels;

void Start()
    {   
        WavePanels = Instantiate(Resources.Load("WavePanels", typeof(GameObject))) as GameObject;
        WavePanels.transform.SetParent(GameObject.Find("PopUpCanvas").transform);//WavePanels가 PopUpCanvas의 Child로 들어간다
        WavePanels.GetComponent<RectTransform>().anchoredPosition = Vector3.zero;
        WavePanels.GetComponent<RectTransform>().localScale = new Vector3(1,1,1);
        
        if(WavePanels)
        {
            Debug.Log("WavePanels is Ready");
        }
    }