프리팹으로 구조 구축
Use prefabs to instantiate several copies of a block prefab to construct a wall.
읽는 시간 2분최근 업데이트: 한 달 전
코드를 사용하여 특정한 설정의 프리팹 복사본을 대규모로 즉시 만들 수 있습니다. 코드를 사용하여 이런 식으로 구조체를 생성하는 것을 절차적 생성이라고 부릅니다.
블록 벽 인스턴스 만들기
이 작업은 블록 벽 인스턴스를 만드는 방법을 보여줍니다.
게임 오브젝트에 Wall 스크립트 연결
- MonoBehaviour 스크립트를 생성하고 이름을 로 지정합니다.
Wall - 아래 코드를 복사하여 스크립트에 넣습니다.
Wall - 스크립트를 씬의 빈 게임 오브젝트에 연결합니다.
Wall
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); } } }}
결과: 필드가 인 변수가 인스펙터에 표시됩니다. 값은 이 변수에 프리팹이 아직 할당되지 않았음을 의미합니다.
NoneBlockNone
아직 프리팹이 할당되지 않은 Block 변수
Block 변수에 프리팹 할당
위 스크립트 예시는 Block 변수에 프리팹을 할당하기 전까지는 동작하지 않습니다. 간단한 블록 프리팹을 만들려면 다음 과정을 따르십시오.
-
GameObject > 3D Object > Cube를 선택합니다.
-
큐브를 계층 창에서 프로젝트 창의 Assets 폴더로 드래그합니다. 그러면 프리팹 에셋이 생성됩니다.
-
프리팹 이름을으로 바꿉니다.
Block -
이제프리팹이 에셋으로 존재하므로 계층 구조에서 큐브를 안전하게 삭제할 수 있습니다.
Block -
이제프리팹을 만들었으므로 이를 Block 변수에 할당할 수 있습니다. 원본 게임 오브젝트(
Block스크립트가 연결된 오브젝트)를 선택합니다. 이후 프로젝트 창에서Wall프리팹을 Block 변수 슬롯(Block으로 표시된 곳)으로 드래그합니다.None

Block 프리팹이 할당된 Block 변수
위 과정을 완료한 후 Play를 클릭하면 Unity가 해당 프리팹을 사용하여 벽을 빌드합니다.

위 예시에서 생성된 10개의 블록을 4열로 쌓아 만든 벽.
이는 Unity에서 반복해서 사용할 수 있는 유연한 워크플로 패턴입니다. 이 스크립트에서 프리팹을 사용했으므로, 스크립트를 건드리지 않고도 프리팹을 쉽게 교체하거나 편집하여 벽을 구성하는 벽돌의 프로퍼티를 수정할 수 있습니다. 씬에서 서로 다른 프리팹이 할당된 다른 게임 오브젝트에 스크립트를 사용하여 서로 다른 프리팹 유형으로 구성된 다양한 벽을 만드는 것도 가능합니다.
Wall코드를 사용하여 제작 중인 게임이나 앱에 맞게 게임 오브젝트를 격자, 원형 패턴, 무작위 분산을 비롯한 다양한 패턴으로 배치할 수 있습니다. 다음 예시는 인스턴스를 원형으로 배치하는 법을 보여줍니다.
using UnityEngine;public class CircleFormation : MonoBehaviour{ // Instantiates prefabs in a circle formation 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); } }}

위 예시에서 생성된 원형 블록 배열