멀티 장면을 이용한 개발에서 Instantiate라고 하면 예상치 못한 장면이 나옵니다.

4229 단어 Unity

멀티플렉스 개발 사용


유니티 5과가 언제부터인지는 여러 장면이라고 할 수 있다.
현재 프로젝트에서 처음으로 다중 장면을 사용합니다.
그때 빠졌던 올가미를 소개해 줬으면 좋겠어요.

Instantiate라고 부르면 어떤 장면에 배치될까?


유닛 쓰시는 분들 다 좋아하시더라고요.Instantiate.
Hierarchy에서 GameObject를 생성할 때 사용합니다.
장면이 많지 않을 때는 아무 것도 의식이 없는 인스타넷은 장면에서 게임Object를 생성한다.
그렇다면 멀티플렉스에서 Instantiate라면 어떤 장면이 게임Object를 만들 수 있을까요?

장면을 개별적으로 열고 GameObject 만들기


Instantiate 장면을 열면 Instantiate가 적절한 Plefab(Cube)를 만듭니다.
버튼의 Addlistener는 Instantiate에서만 사용할 수 있습니다.
[SerializeField] private Button _instantiatePrefabButton;

[SerializeField] private GameObject _prefab;

// Use this for initialization
private void Start()
{
    _instantiatePrefabButton.onClick.AddListener(() => { Instantiate(_prefab); });
}

뭐, 장면이 하나밖에 없으니까 그 장면에 배치될 거야.

Additive 추가 Instantiate 장면으로 GameObject 만들기


먼저 적당한 장면을 열고, Additive로 Instantiate 장면을 엽니다.
[SerializeField] private Button _addSceneButton;

private void Start()
{
    addSceneButton.onClick.AddListener(() =>
           SceneManager.LoadScene("Instantiate", LoadSceneMode.Additive));
}
그렇다면 Instantiate 장면에서 Instantiate의 GameObject는 도대체 어떤 장면으로 만들어질까

Instantiate 장면이 아닌 Main 장면으로 제작됐다.

대책(아미노산)


Instantiate 장면에서 적절한 하늘 게임Object를 만든 뒤 부모로서 게임Object를 만든다.
private void Start()
{
    _instantiatePrefabButton.onClick.AddListener(() => { Instantiate(_prefab, _transform); });
}

Instantiate 장면에서 GameObject를 만들었네요.

총결산


다중 장면을 사용할 때도 Hierrache에서 Instantiate의 위치를 주의해야 한다.
예를 들어 위의 예에서 Unload Instantiate 장면이 있더라도 Instantiate 장면에서 만들어졌던 GameObject는 삭제되지 않고 남아 있다.(실제로 이로 인해 오류가 생겼다)

좋은 웹페이지 즐겨찾기