Unity 스크립팅 API 가이드 (한국어)
이 문서는 Unity에서 프리팹을 런타임 시점에 인스턴스화하는 방법에 대한 내용을 다룹니다. 프리팹은 게임 오브젝트의 복잡한 설정을 쉽게 다룰 수 있게 해주는 강력한 도구입니다.
프리팹 인스턴스화의 장점
- 코드의 짧음: 프리팹을 인스턴스화하는 한 줄의 코드로 복잡한 게임 오브젝트를 만듭니다.
- 편리한 수정: 씬 뷰에서 프리팹을 쉽게 수정하고 변경할 수 있습니다.
- 유연성: 코드 변경 없이도 다양한 프리팹으로 교체할 수 있습니다.
프리팹 인스턴스화 기본 사항
프리팹을 인스턴스화하는 기본 코드는 다음과 같습니다:
using UnityEngine;
public class InstantiationExample : MonoBehaviour
{
public GameObject myPrefab;
void Start()
{
Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
}
예제 활용 방법
- 새로운 C# 스크립트를 생성하고 "InstantiationExample"로 이름을 지정합니다.
- 위 코드를 복사하여 붙여넣고 저장합니다.
- Scene 뷰에서 빈 게임 오브젝트를 생성합니다.
- 빈 게임 오브젝트에 위 스크립트를 추가합니다.
- 프리팹을 프로젝트 창의 스크립트 컴포넌트에 드래그합니다.
- Play 모드에서 프리팹이 인스턴스화되는 모습을 확인합니다.
일반적인 활용 시나리오
프리팹 인스턴스화는 다양한 경우에 유용하게 사용될 수 있습니다:
- 구조체 빌드: 반복적으로 같은 프리팹을 여러 위치에 복사하여 구조체를 만듭니다.
- 발사체 발사: 발사체 프리팹을 인스턴스화하여 몬스터를 쏘는 기능을 구현합니다.
- 파괴 효과: 게임 오브젝트가 파괴된 후 파괴된 형태의 프리팹으로 교체하기.
구조체 빌드 예제
using UnityEngine;
public class Wall : MonoBehaviour
{
public GameObject block;
public int width = 10;
public int height = 4;
void Start()
{
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
Instantiate(block, new Vector3(x, y, 0), Quaternion.identity);
}
}
}
}
원형 배열 배치 예제
using UnityEngine;
public class CircleFormation : MonoBehaviour
{
public GameObject prefab;
public int numberOfObjects = 20;
public float radius = 5f;
void Start()
{
for (int i = 0; i < numberOfObjects; i++)
{
float angle = i * Mathf.PI * 2 / numberOfObjects;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
Vector3 pos = transform.position + new Vector3(x, 0, z);
float angleDegrees = -angle * Mathf.Rad2Deg;
Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
Instantiate(prefab, pos, rot);
}
}
}
발사체 발사 예제
using UnityEngine;
public class FireProjectile : MonoBehaviour
{
public Rigidbody projectile;
public float speed = 4;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);
p.velocity = transform.forward * speed;
}
}
}
폭발 효과 예제
using UnityEngine;
public class Projectile : MonoBehaviour
{
public GameObject explosion;
void OnCollisionEnter()
{
Instantiate(explosion, transform.position, transform.rotation);
Destroy(gameObject);
}
}
결론
프리팹을 사용한 인스턴스화는 Unity에서 게임 오브젝트와 그 속성을 동적으로 생성하고 관리하는 강력한 도구입니다. 다양한 프리팹을 사용하여 게임의 역동성과 재미를 높일 수 있습니다. 필요에 따라 각 코드를 수정하고 다양한 프리팹과 조합하여 흥미롭고 창의적인 게임을 제작해 보세요!
모든 예제가 포함된 프로젝트는 다음 링크에서 다운로드할 수 있습니다: InstantiatingPrefabsExamples.zip