프로젝트 뷰에 있는 원본 프리팹은 이 상태 그대로는 게임 씬에서 보거나 사용할 수 없습니다.
그렇기 때문에 이렇게 게임 안에 프리팹을 배치해야 하는데
프리팹을 자유자재로 사용하기 위해서는 하이얼아키 뷰에 끌어다 놓는 방법 외에도
스크립트를 이용해서 배치하는 방법을 알아야 합니다.
이번 시간에는 프리팹을 인스턴스화하는 법을 배워봅시다.
Instantiate()는 매개변수의 입력된 오브젝트를
완전히 동일하게 복제해서 생각하는 함수입니다.
public class Spawner : MonoBehaviour
{
public GameObject GameObject; // 인스펙터에 노출하기위한 오브젝트 변수
GameObject tank;
void Start()
{
tank = Instantiate(GameObject);
}
}

스크립트를 작성하여 게임 오브젝트에 붙이고
인스펙터 뷰에서 Game Object 프로퍼티에 생성을 원하는 오브젝트를 드래그&드롭하여 연결합니다.
Instantiate()는 내부적으로는 동적할당(new 연산자)이기 때문에 이것을 받아줄 변수가 필요합니다.
때문에 또 다른 게임오브젝트 타입의 변수(GameObject tank)로 이것을 받아서
tank의 색상,크기를 바꾸거나 오브젝트를 파괴하는 등 다양한 작업을 할 수 있습니다.

게임을 실행하면 오브젝트가 생성됨을 알 수 있습니다.
Instantiate()는 오브젝트 생성시 어떤 포지션에 어떤 각도로 생성할지 등등
다양한 설정을 할 수있도록 오버로딩 되어있습니다.
Destroy()는 Instantiate()와 반대로 오브젝트를 삭제하는 메소드입니다.
오브젝트뿐만 아니라 오브젝트에 부착되어 있는 개별 컴포넌트도 삭제가 가능합니다.
(하지만 보통 컴포넌트를 삭제하는 것 보다는 비활성화 하는 방법을 추천합니다.)
매개변수에 게임오브젝트만 넣는다면 함수 실행 즉시 삭제되고,
두 번째 매개변수에 시간을 지정하면
함수 실행후 지정한 시간이 지나게 되었을 때 삭제됩니다.
public class Spawner : MonoBehaviour
{
public GameObject GameObject; // 인스펙터에 노출하기위한 오브젝트 변수
GameObject tank;
void Start()
{
tank = Instantiate(GameObject); // 생성한 오브젝트를 받아옵니다.
}
void Update()
{
if (Input.GetKeyDown(KeyCode.X))
{
Destroy(tank, 3f); // 받아온 변수를 이용해 삭제합니다.
}
}
}
하지만 게임 오브젝트를 에디터에서 받아오는 방법에도 한계가 있기 때문에
서버를 이용하거나 리소스를 모아놓은 폴더에 접근하여 불러오는 방법이 있습니다.
다음 시간에 리소스매니저를 만들며 방법을 소개하겠습니다.