본문 바로가기
게임 프로그래밍/유니티(2021.3 LTS) 강좌

[유니티 기초] 게임 실행 중 프리팹 오브젝트 생성

by 레오란다 2022. 10. 25.
반응형

게임 실행 중에 슬라임 생성

이번엔 Slime 프리펩을 이용하여 게임 실행 중에 슬라임들을 생성해 보도록 하겠습니다.

 

 Hierarchy 창에 새로운 빈 오브젝트를 생성합니다. 빈 오브젝트의 이름을 SlimeSpawner 로 변경합니다.

 SlimeSpawner 에 스크립트 컴포넌트를 추가합니다. 이름은 똑같이 SlimeSpawner로 생성합니다.

 스크립트에 다음의 코드를 작성합니다.

 

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

public class SlimeSpawner : MonoBehaviour
{
   public Transform slimePrefab;

   // Start is called before the first frame update
   void Start()
   {
      StartCoroutine(SpawnSlime());
   }

   IEnumerator SpawnSlime()
   {
      while (Application.isPlaying)
      {
         Vector3 p = Random.insideUnitSphere * 25;

         Vector3 pos = new Vector3(p.x, 0f, p.z);
         var slime = Instantiate(slimePrefab, pos, Quaternion.identity);

         yield return new WaitForSeconds(1f);
      }
   }

   // Update is called once per frame
   void Update()
   {

   }
}

 

  • 위의 코드는 코루틴 함수를 이용해 슬라임을 1초에 한 마리씩 소환하는 코드입니다.
  • Random.insideUnitySphere 는 원점 (0, 0, 0) 을 기준으로 반지름의 크기가 1 인 구체 내부의 좌표를 랜덤하게 생성해줍니다. x, y, z 각각 -1.0 ~ 1.0 사이의 무작위 값이 반환됩니다.
  • Instantiate 는 프리팹을 인스턴스화 시켜주는 함수입니다. 여기서는 슬라임이 생성됩니다.
  • yield return new WaitForSeconds(1f) 코드가 수행되는 시점에 코루틴 함수는 제어를 유니티에 반환하고 작업 수행을 잠시 중단합니다. 1초 후에 다시 제어권을 받고 중단했던 작업을 이어가게 됩니다. 

* 코루틴에 대한 자세한 설명은 여기를 참조해 주세요.

 

씬 창에서 SlimeSpwner 오브젝트를 클릭한 후 Project 창에서 Slime 프리팹을 드래그 하여 인스펙터 창의 SlimeSpawner 스크립트에 연결해 줍니다. 이렇게 하면 스크립트의 "slimePrefab" 프로퍼티에 연결되어 코드에서 사용할 수 있습니다.

 

프리팹을 스크립트에 연결

 

"Main Camera" 를 클릭하고 Transform 을 다음과 같이 변경해 줍니다.

 

Main Camera Transform

* 카메라가 위에서 아래를 비추도록 하기위한 Transform 값입니다.

 

 

게임을 실행하면 1초 마다 슬라임이 랜덤한 위치에 생성됩니다.

 

 

반응형

댓글