Prefab을 GameManager 스크립트에서 Instantiate 하고 Destroy 시키려고 코드를 작성하고 실행하니 오류가 발생하였다.
// GameManager.cs
public GameObject prefab;
Instantiate(prefab);
Destroy(prefab.gameObject); // 오류 발생
오류의 원인을 살펴보니 Destroy(prefab.gameObject)에서 prefab.gameObject는 금방 생성한 게임 오브젝트 Prefab이 아니라 Prefabs 파일 안의 원본을 파괴하라는 뜻이어서 데이터 손실이 발생함으로 오류가 발생한 것이다.
해당 Prefab에 관한 스크립트를 작성하여, Prefab에 붙여주고 해당 스크립트에서 직접 Destroy 해주었다.
// Prefab.cs
Destroy(gameObject);
해당 작업 후 실행 시켜보니 생성된 오브젝트만 잘 파괴되는 모습을 보였다.
Text에 Animator를 입혀 Prefab화 하고 Instantiate 해보니 내가 제작한 위치와 완전 다른 곳에서 Text가 나타나고 동작하였다.
public GameObject prefab;
Instantiate(prefab); // 오류 발생
UI를 Prefab화 하여 그냥 Instantiate를 해주면 부모인 Canvas 밖에서 오브젝트가 생성이 되어 내가 원하는 위치가 아닌 다른 위치에서 생성이 된다.
UI를 Prefab화 하여 Instantiate를 해줄 때는 부모인 Canvas에 상속시켜주어야 한다.
public GameObject prefab;
public GameObject canvas;
Instantiate(prefab, canvas.transform);
이렇게 코드 변경 후 실행 시켜보면 Prefab이 Canvas에 상속되어 내가 원하는 위치에 생성된다.