Unity 강의 정리 5-4장: C# 프로그래밍 [중급] (1/2) : Instantiate🎮

나무에물주기·2023년 8월 18일
1

Unity

목록 보기
13/21
post-thumbnail

인프런에 있는 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리하는 글입니다!

Instantiate의 활용과 기능 📚


1. 오브젝트 인스턴스화 📜

인스턴스화는 게임 오브젝트를 씬에 동적으로 생성하는 과정이다. 예를 들어, 총알, 적, 아이템 등을 게임 플레이 중에 생성해야 할 때 사용한다.

다음 코드는 기본적인 인스턴스화의 예시로, 게임이 시작될 때 target 오브젝트를 복제한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject target;

    void Start()
    {
        Instantiate(target);
    }
}
  • target: 인스턴스화할 오브젝트. 에디터에서 드래그 앤 드롭으로 지정할 수 있다.
  • Instantiate(target): target을 현재 씬에 복제한다. 생성된 오브젝트는 원본과 동일한 위치, 회전, 크기를 가진다.

이 코드를 Empty Object (Spawner)에 붙이고 Sphere Object (Ball)를 만든 후, Rigidbody 컴포넌트를 붙인다. 게임을 실행하면 Ball 오브젝트가 생기면서 오브젝트가 중력을 받아 떨어진다.


2. Prefab을 이용한 오브젝트 복제 🏭

Prefab은 게임 오브젝트의 템플릿으로, 여러 씬에 걸쳐 동일한 오브젝트를 재사용할 수 있게 해준다. Prefab을 수정하면, 해당 Prefab을 사용하는 모든 인스턴스가 자동으로 업데이트된다.

  1. Prefab 생성: 에디터에서 오브젝트를 선택하고 Project 패널로 드래그 앤 드롭한다.
  2. Prefab 인스턴스화: 스크립트에서 Instantiate 함수를 사용하여 Prefab을 씬에 복제한다.
public class Spawner : MonoBehaviour
{
    public GameObject target; 

    void Start()
    {
        Instantiate(target);
    }
}
  • target: 인스턴스화할 Prefab. 에디터에서 드래그 앤 드롭으로 지정할 수 있다.
  • Instantiate(target): Prefab을 현재 씬에 복제한다.
    Prefab을 사용하면, 게임 오브젝트의 모양, 크기, 텍스처, 스크립트 등을 미리 설정할 수 있다. 게임에서 동일한 오브젝트를 여러 번 사용해야 하는 경우, Prefab을 사용하면 개발 효율성을 향상시킬 수 있다.

3. Instantiate 함수를 이용한 위치와 회전 설정 🎛️

Instantiate 함수는 오브젝트를 복제할 때 위치, 회전, 부모 오브젝트 등을 설정할 수 있는 추가 인수를 제공한다. 이를 통해 생성된 오브젝트의 초기 상태를 세밀하게 제어할 수 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject target; 
    public Transform spawnPosition; 

    void Start()
    {
        Instantiate(target, spawnPosition.position, spawnPosition.rotation);
    }
}
  • spawnPosition: 인스턴스화할 오브젝트의 초기 위치와 회전을 지정하는 Transform.
  • Instantiate(target, spawnPosition.position, spawnPosition.rotation): 오브젝트를 특정 위치와 회전으로 복제한다.

이 코드는 target 오브젝트를 spawnPosition의 위치와 회전으로 복제한다.


4. 인스턴스화된 오브젝트의 참조와 제어 💼

Instantiate 함수는 생성된 오브젝트의 참조를 반환한다. 이 참조를 사용하면 생성된 오브젝트의 프로퍼티와 메서드를 제어할 수 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject target; 
    public Transform spawnPosition;

    void Start()
    {
        GameObject instance = Instantiate(target, spawnPosition.position, spawnPosition.rotation);
        Debug.Log(instance.name);
    }
}

또는 특정 컴포넌트를 직접 반환받을 수도 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public Rigidbody target; 
    public Transform spawnPosition; 

    void Start()
    {
        Rigidbody instance = Instantiate(target, spawnPosition.position, spawnPosition.rotation);
        instance.AddForce(0, 1000, 0);
    }
}

Rigidbody 컴포넌트를 가진 target 오브젝트를 복제하고, 생성된 오브젝트에 힘을 가한다.

정리 🎓

Instantiate 함수는 유니티에서 게임 오브젝트를 동적으로 생성하는 데 사용된다. 기본 인스턴스화부터 Prefab의 사용, 오브젝트의 위치와 회전 설정, 생성된 오브젝트의 제어까지 다양한 기능을 제공한다.

profile
개인 공부를 정리함니다

0개의 댓글