프리팹과 인스턴스화
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 48번째.
프리팹은 템플릿으로 저장된 GameObject입니다. Hierarchy에서 객체를 Project 창으로 드래그하면 Unity가 모든 컴포넌트와 Inspector 값을 함께 저장합니다. 프리팹 자체는 씬에 있지 않습니다. 스크립트는 다른 참조와 마찬가지로 필드를 통해 프리팹을 가져옵니다. public GameObject parcelPrefab;을 선언하고 Inspector에서 프리팹을 해당 필드로 드래그하세요.
Instantiate(prefab, position, rotation)은 씬에 프리팹의 복사본을 만들고 이를 반환합니다. 이 배송 드론은 Space 키를 누를 때마다 자신의 위치에 소포를 떨어뜨립니다. Quaternion.identity는 회전이 없다는 뜻입니다.
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}키를 누를 때마다 Hierarchy에 Parcel(Clone)이라는 이름의 객체가 하나씩 추가됩니다. 프리팹은 원래 상태 그대로 유지되므로 모든 복사본은 같은 값으로 시작합니다. 여기서는 GetKeyDown이 중요합니다. GetKey를 사용하면 Space 키를 0.5초 동안 누르고 있는 동안 프레임마다 하나씩, 약 30개의 소포가 떨어집니다.
챌린지
중급화살표 키로 이미 플레이어를 움직이고 있습니다. 클릭할 때마다 플레이어 위에 코인을 생성하세요:
GameObject형식의 공개 필드coinPrefab을 추가하세요. 필드가 생기면 씬에서 Coin 프리팹을 해당 필드에 넣습니다.- 마우스 왼쪽 버튼을 클릭하면 플레이어 위로 2단위 떨어진 곳에 회전 없이 코인 하나를 복제해 생성하세요.
Play를 누르고, 몇 번 움직이고 클릭한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: Coin 프리팹이 할당된 public GameObject 필드
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
// 클릭: 플레이어 위 2유닛 위치에 코인을 생성
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.