Unity/기타

프리팹(prefab) 개념 및 응용/제너레이터 스크립트

s0002 2023. 1. 31. 13:24

설계도란 '이러한 제품을 만들고 싶다'고 쓴 견본 파일과 같다

유니티에서는 이 설계도를 프리팹이라고 한다

프리팹은 게임 오브젝트가 파일화된 것이다

 

프리팹은 같은 오브젝트를 많이 만들고 싶을 때 사용한다

프리팹을 통해 여러 오브젝트들을 만들면 변경 사항이 있을 때 프리팹 파일만 수정하면 되므로 간단하게 수정 할 수 있다

또 다른 씬에서 프리팹을 재사용할 수 있다는 장점이 있다

 

프리팹을 통해 씬 안에 만들어진 게임 오브젝트는 프리팹의 인스턴스이며 프리팹과는 다르다

프리팹을 통해 만들어진 오브젝트들이 어떤 동작을 수행하도록 만들고 싶으면

프리팹을 그 동작을 포함한 객체(스크립트가 부착된)에 연결해준다

 

프리팹을 더블 클릭하면 프리팹 모드로 들어가고 프리팹을 수정할 수 있다

 


프리팹을 이용해 누적 시간이 1보다 커지면 0으로 만들고 프리팹의 인스턴스(오브젝트)를 지정한 위치에 생성하는 제너레이터 스크립트이다

 

Time.deltaTime: 현재 프레임과 이전 프레임과의 시간 차이

  시간을 잴 때, 시간 베이스로 이동할 때 사용

 

Instantiate(): 프리팹(리소스)로부터 프리팹 인스턴스 생성

 

Random.Range(a,b) 

  a,b가 int 타입이면 범위 minInclusive~maxExclulsive

  a,b가 float 타입이면 범위 minInclusive~maxInclulsive

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

public class ArrowGenerator : MonoBehaviour
{
    public GameObject arrowPrefab;
    //bool isRun = true;

    // Start is called before the first frame update
    void Start()
    {
        //Debug.LogFormat("arrowPrefab:{0}", arrowPrefab);
    }

    float delta;
    // Update is called once per frame
    void Update()
    {
        if (isRun)
        {
            //시간 누적
            this.delta += Time.deltaTime; //매 프레임 간격마다 시간 누적

            if (this.delta > 1) //1초 지남
            {
                //1초마다 0으로 초기화
                this.delta = 0;
                               
                //화살 생성
                //Debug.Log("화살 생성");
                //arrowPrefab의 인스턴스 생성
                GameObject go = Instantiate(this.arrowPrefab);

                //랜덤 x좌표로 위치 변경
                //-6부터 6까지 생성해야 함
                var x = Random.Range(-6, 7); //int 매개변수minInclusive~maxExclulsive

                //생성된 화살 오브젝트의 위치로 사용           
                go.transform.position = new Vector3(x, 5.66f, 0);
            }
        }
    }  

    //public void Stop()
    //{
    //    isRun = false;
    //}

}