Version: Unity 6.0 (6000.0)
언어 : 한국어
프리팹 인스턴스화 소개
발사체 및 폭발 인스턴스화

프리팹으로 구조 구축

코드를 사용하여 특정한 설정의 프리팹 복사본을 대규모로 즉시 만들 수 있습니다. 코드를 사용하여 이런 식으로 구조체를 생성하는 것을 절차적 생성이라고 부릅니다.

블록 벽 인스턴스 만들기

이 작업은 블록 벽 인스턴스를 만드는 방법을 보여줍니다.

게임 오브젝트에 Wall 스크립트 연결

  1. MonoBehaviour 스크립트를 생성하고 이름을 Wall로 지정합니다.
  2. 아래 코드를 복사하여 Wall 스크립트에 넣습니다.
  3. 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);
           }
       }       
   }
}

결과: 필드가 NoneBlock 변수가 인스펙터에 표시됩니다. None 값은 이 변수에 프리팹이 아직 할당되지 않았음을 의미합니다.

아직 프리팹이 할당되지 않은 Block 변수
아직 프리팹이 할당되지 않은 Block 변수

Block 변수에 프리팹 할당

위 스크립트 예시는 Block 변수에 프리팹을 할당하기 전까지는 동작하지 않습니다. 간단한 블록 프리팹을 만들려면 다음 과정을 따르십시오.

  1. GameObject > 3D Object > Cube를 선택합니다.

  2. 큐브를 계층 창에서 프로젝트 창의 Assets 폴더로 드래그합니다. 그러면 프리팹 에셋이 생성됩니다.

  3. 프리팹 이름을 Block으로 바꿉니다.

  4. 이제 Block 프리팹이 에셋으로 존재하므로 계층 구조에서 큐브를 안전하게 삭제할 수 있습니다.

  5. 이제 Block 프리팹을 만들었으므로 이를 Block 변수에 할당할 수 있습니다. 원본 게임 오브젝트(Wall 스크립트가 연결된 오브젝트)를 선택합니다. 이후 프로젝트 창에서 Block 프리팹을 Block 변수 슬롯(None으로 표시된 곳)으로 드래그합니다.

Block 프리팹이 할당된 Block 변수
Block 프리팹이 할당된 Block 변수

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

위 예시에서 생성된 10개의 블록을 4열로 쌓아 만든 벽.
위 예시에서 생성된 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);
       }
   }
}
위 예시에서 생성된 원형 블록 배열
위 예시에서 생성된 원형 블록 배열

추가 리소스

프리팹 인스턴스화 소개
발사체 및 폭발 인스턴스화
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961