Version: Unity 6.0 (6000.0)
언어 : 한국어
런타임 시 프리팹 인스턴스화
프리팹으로 구조 구축

프리팹 인스턴스화 소개

런타임 시 프리팹을 인스턴스화하려면 코드에 해당 프리팹에 대한 레퍼런스가 필요합니다. 이러한 레퍼런스를 만들려면 코드에서 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);
    }
}

예제를 사용하는 방법

  1. 프로젝트에서 새로운 MonoBehaviour 스크립트를 만들고 InstantiationExample이라는 이름을 지정합니다.
  2. 위의 코드를 복사하여 새로운 스크립트에 붙여 넣은 후 저장합니다.
  3. GameObject > Create Empty 메뉴를 사용하여 빈 게임 오브젝트를 만듭니다.
  4. 스크립트를 빈 게임 오브젝트로 드래그하여 스크립트를 컴포넌트로 새 게임 오브젝트에 추가합니다.
  5. 프리팹을 만든 후 해당 프리팹을 프로젝트 창에서 스크립트 컴포넌트의 My Prefab 필드로 드래그합니다.
프리팹을 프로젝트 창에서 스크립트 컴포넌트의 My Prefab 필드로 드래그하기
프리팹을 프로젝트 창에서 스크립트 컴포넌트의 My Prefab 필드로 드래그하기

Play 모드를 시작하면 씬의 (0, 0, 0) 위치에서 프리팹이 인스턴스화됩니다.

인스펙터 창에서 다른 프리팹을 My Prefab 필드로 드래그하면 스크립트를 변경하지 않고도 인스턴스화할 프리팹을 변경할 수 있습니다.

이 첫 번째 예시는 매우 간단하기 때문에 프리팹을 씬에 직접 배치하는 것에 비해 어떤 장점이 있는지 체감되지 않을 수 있습니다. 하지만 코드를 사용하여 프리팹을 인스턴스화하면 게임이나 앱이 실행 중일 때 복잡한 게임 오브젝트의 구성을 동적으로 생성할 수 있습니다. 이는 본 섹션의 다른 예시에서 확인할 수 있을 것입니다.

일반적인 시나리오

런타임에 프리팹을 인스턴스화하는 방식은 다음과 같은 시나리오에서 유용합니다.

  • 단일 프리팹을 다양한 위치(예: 그리드 또는 원 배열)로 여러 번 복제하여 구조체를 빌드합니다.

  • 런처에서 발사체 프리팹을 발사합니다. 발사체 프리팹은 메시, 리지드바디, 콜라이더, 오디오소스, 동적 광원, 자체 트레일 파티클 시스템이 포함된 자식 게임 오브젝트가 들어 있는 복잡한 설정일 수 있습니다.

  • 여러 조각으로 부서질 수 있는 차량, 건물, 캐릭터(로봇 등)을 만듭니다. 이 시나리오에서 예시 스크립트는 완전체로서 작동 중인 로봇 프리팹을 삭제하여 파괴된 로봇 프리팹으로 대체합니다. 이 파괴된 프리팹은 서로 다른 부서진 부품들로 구성되며 각 부품에는 고유의 리지드바디와 파티클 시스템이 설정되어 있습니다. 이 기법을 사용하면 한 줄의 코드만으로 로봇을 여러 조각으로 폭파하여 원래의 게임 오브젝트를 파괴된 프리팹으로 대체할 수 있습니다.

다음 섹션에서는 이러한 시나리오를 구현하는 방법을 보여드리겠습니다.

추가 리소스

런타임 시 프리팹 인스턴스화
프리팹으로 구조 구축