1인 개발 게임 (Unity)/UNITY

[UNITY] instantiate 인스턴스, 프리팹을 씬에 생성하기

Z46 2024. 8. 9. 08:08

안녕하세요, 인친님들! 오늘은 Unity에서 자주 사용되는 중요한 메서드인 Instantiate에 대해 알아보겠습니다.

이 메서드는 게임 오브젝트를 생성할 때 매우 유용하니 잘 이해해두시면 좋겠어요!

Instantiate 메서드란?

Instantiate 메서드는 간단히 말해 프리팹(Prefab)을 실제 게임 세계에 생성하는 마법 같은 기능입니다. 프리팹은 미리 만들어둔 게임 오브젝트의 설계도라고 생각하면 됩니다.

어떻게 사용하나요?

  1. 매개변수로 프리팹을 전달합니다.
  2. 그러면 놀랍게도 그 프리팹의 실제 인스턴스(복제본)를 반환해줍니다!

위 다그림은 Instantiate 메서드의 작동 방식을 보여줍니다. 프리팹이 Instantiate 메서드를 통과하면 실제 게임 월드에 배치될 수 있는 인스턴스가 생성됩니다.

언제 사용하나요?

Instantiate 메서드는 다음과 같은 상황에서 주로 사용됩니다:

  1. 동적 오브젝트 생성: 게임 중에 적, 아이템, 효과 등을 생성할 때
  2. 레벨 생성: 맵의 요소들을 코드로 배치할 때
  3. 복제: 이미 존재하는 오브젝트의 복사본이 필요할 때

 

다양한 사용법

// 프리팹 선언
public GameObject 프리팹;

void 다양한인스턴시에이트사용법()
{
    // 1. 기본 사용
    Instantiate(프리팹);

    // 2. 위치 지정
    Vector3 위치 = new Vector3(0, 5, 0);
    Instantiate(프리팹, 위치, Quaternion.identity);

    // 3. 위치와 회전 지정
    Quaternion 회전 = Quaternion.Euler(0, 45, 0);
    Instantiate(프리팹, 위치, 회전);

    // 4. 부모 트랜스폼 지정
    Transform 부모오브젝트 = transform;
    Instantiate(프리팹, 부모오브젝트);

    // 5. 위치, 회전, 부모 모두 지정
    Instantiate(프리팹, 위치, 회전, 부모오브젝트);

    // 6. 월드 포지션 유지 옵션
    bool 월드포지션유지 = true;
    Instantiate(프리팹, 부모오브젝트, 월드포지션유지);
}

 

 

이제 각 사용법에 대해 자세히 설명해 드리겠습니다:

  1. 기본 사용
    • Instantiate(프리팹);
    • 가장 단순한 형태로, 프리팹을 현재 씬에 생성합니다.
    • 프리팹의 원래 위치와 회전을 유지합니다.
  2. 위치 지정
    • Instantiate(프리팹, 위치, Quaternion.identity);
    • 지정된 위치에 프리팹을 생성합니다.
    • Quaternion.identity는 회전 없음을 의미합니다.
  3. 위치와 회전 지정
    • Instantiate(프리팹, 위치, 회전);
    • 지정된 위치와 회전으로 프리팹을 생성합니다.
  4. 부모 트랜스폼 지정
    • Instantiate(프리팹, 부모오브젝트);
    • 생성된 오브젝트를 특정 부모 오브젝트의 자식으로 설정합니다.
    • 부모 오브젝트의 위치를 기준으로 생성됩니다.
  5. 위치, 회전, 부모 모두 지정
    • Instantiate(프리팹, 위치, 회전, 부모오브젝트);
    • 가장 상세한 제어가 가능한 형태입니다.
  6. 월드 포지션 유지 옵션
    • Instantiate(프리팹, 부모오브젝트, 월드포지션유지);
    • 부모 지정 시 월드 공간에서의 위치를 유지할지 결정합니다.
    • true면 월드 위치 유지, false면 부모 기준 로컬 위치로 설정됩니다.

주요 포인트:

  • 모든 Instantiate 호출은 생성된 GameObject를 반환합니다.
  • 위치는 Vector, 회전은 Quaternion 타입을 사용합니다.
  • 부모 지정 시 Transform 컴포넌트를 사용합니다.

 

사용 예시

간단한 코드 예시를 통해 Instantiate의 사용법을 알아보겠습니다:

public GameObject enemyPrefab; // 인스펙터에서 할당할 프리팹

void SpawnEnemy()
{
    Vector3 spawnPosition = new Vector3(0, 0, 0); // 생성 위치
    Quaternion spawnRotation = Quaternion.identity; // 기본 회전값

    GameObject newEnemy = Instantiate(enemyPrefab, spawnPosition, spawnRotation);
    // 이제 newEnemy는 게임 월드에 실제로 존재하는 오브젝트입니다!
}

이 코드에서 InstantiateenemyPrefab을 복제하여 지정된 위치와 회전값으로 새로운 적 오브젝트를 생성합니다.

 

 

#유니티Instantiate #오브젝트생성 #프리팹인스턴스화 #유니티개발팁 #게임오브젝트생성 #유니티스크립팅 #C샵게임프로그래밍 #유니티3D #유니티2D #게임개발기초