런타임 시 프리팹을 인스턴스화하려면 코드에 해당 프리팹에 대한 레퍼런스가 필요합니다. 이러한 레퍼런스를 만들려면 코드에서 GameObject 유형의 공용 필드를 만든 뒤 인스펙터에서 해당 필드에 사용하려는 프리팹을 할당하십시오.
아래 스크립트 예시에는 프리팹에 대한 레퍼런스인 myPrefab이라는 public 변수가 하나 있습니다. 이는 Start 메서드에서 해당 프리팹의 인스턴스를 생성합니다.
using UnityEngine;
public class InstantiationExample : MonoBehaviour
{
// Reference to the Prefab. Drag a Prefab into this field in the Inspector.
public GameObject myPrefab;
// This script will simply instantiate the Prefab when the game starts.
void Start()
{
// Instantiate at position (0, 0, 0) and zero rotation.
Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
}
예제를 사용하는 방법
InstantiationExample이라는 이름을 지정합니다.
Play 모드를 시작하면 씬의 (0, 0, 0) 위치에서 프리팹이 인스턴스화됩니다.
인스펙터 창에서 다른 프리팹을 My Prefab 필드로 드래그하면 스크립트를 변경하지 않고도 인스턴스화할 프리팹을 변경할 수 있습니다.
이 첫 번째 예시는 매우 간단하기 때문에 프리팹을 씬에 직접 배치하는 것에 비해 어떤 장점이 있는지 체감되지 않을 수 있습니다. 하지만 코드를 사용하여 프리팹을 인스턴스화하면 게임이나 앱이 실행 중일 때 복잡한 게임 오브젝트의 구성을 동적으로 생성할 수 있습니다. 이는 본 섹션의 다른 예시에서 확인할 수 있을 것입니다.
런타임에 프리팹을 인스턴스화하는 방식은 다음과 같은 시나리오에서 유용합니다.
단일 프리팹을 다양한 위치(예: 그리드 또는 원 배열)로 여러 번 복제하여 구조체를 빌드합니다.
런처에서 발사체 프리팹을 발사합니다. 발사체 프리팹은 메시, 리지드바디, 콜라이더, 오디오소스, 동적 광원, 자체 트레일 파티클 시스템이 포함된 자식 게임 오브젝트가 들어 있는 복잡한 설정일 수 있습니다.
여러 조각으로 부서질 수 있는 차량, 건물, 캐릭터(로봇 등)을 만듭니다. 이 시나리오에서 예시 스크립트는 완전체로서 작동 중인 로봇 프리팹을 삭제하여 파괴된 로봇 프리팹으로 대체합니다. 이 파괴된 프리팹은 서로 다른 부서진 부품들로 구성되며 각 부품에는 고유의 리지드바디와 파티클 시스템이 설정되어 있습니다. 이 기법을 사용하면 한 줄의 코드만으로 로봇을 여러 조각으로 폭파하여 원래의 게임 오브젝트를 파괴된 프리팹으로 대체할 수 있습니다.
다음 섹션에서는 이러한 시나리오를 구현하는 방법을 보여드리겠습니다.