개발/유니티(UNITY)

5-3 유니티로 화살 피하기 게임 만들기

새벽감성개발자 2023. 10. 27. 15:00
반응형

5.7 프리팹과 공장 만들기

5.7.1 공장의 구성

  • 화살 오브젝트를 1초에 한 개씩 만드는 공장(화살 제너레이터)를 생성
  • 양산 기계가 설계도 대로 제품을 생산하는 구조

 

5.7.2 프리팹

  • 같은 오브젝트를 많이 만들고 싶을 때 주로 프리팹을 사용한다.
  • 프리팹 : 설계도, 인스턴스 : 제품

 

5.7.3 프리팹 장점

  • 프리팹을 쓰면 변경 사항이 있을 때 프리팹 파일만 수정하면 되기 때문에 편하게 수정 가능

※ 공장을 만드는 방법

  1. 이미 있는 오브젝트를 사용해 프리팹을 만든다
  2. 제너레이터 스크립트를 만든다
  3. 빈 오브젝트에 제너레이터 스크립트를 적용한다
  4. 제너레이터 스크립트에 프리팹을 전달한다.

 

5.7.4 프리팹 만들기

화살 프리팹 만들기

Hierachy 창에서 arrow를 Resource 폴더를 드래그 드롭 후 arrowPrefab으로 이름을 변경해준다.
기존에 등록한 arrow를 삭제한다.

ArrowGenerator

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

public class ArrowGenerator : MonoBehaviour
{
    public GameObject arrowPrefab;
    float span = 1.0f;
    float delta = 0;

    void Update()
    {
        this.delta += Time.deltaTime;
        if ( this.delta > this.span )
        {
            this.delta = 0;
            GameObject go = Instantiate(arrowPrefab);
            int px = Random.Range(-6, 7);
            go.transform.position = new Vector3(px, 7, 0);

        }
    }
}
  • 인스턴스를 1초마다 한 개씩 생성한다.
  • GameObject arrowPrefab; 에서 프리팹을 넣는 변수를 선언
  • Update() 구문에서 프레임마다 실행되고, 앞 프레임과 현재 프레임의 시간차이는 Time.deltaTime; 에 대입된다.
  • 프레임과 프레임 사이의 시간 차이를 delta에 모으고 합계가 1초 이상이 되면 인스턴스를 생성한다.
  • Instantiate 매서드를 사용해서 생성된다. 매개변수로 프리팹을 전달하면 반환값으로 프리팹 인스턴스를 return해줌
  • 화살표 x 의 좌표(position x => px) 는 -6~6 사이에 불규칙하게 위치하도록 Random클래스의 Range 메서드를 사용

 

5.7.6 빈 오브젝트에 제너레이터 스크립트 적용하기

  • 빈 오브젝트에 제너레이터 스크립트를 적용해야 공장 오브젝트가 된다.

빈 오브젝트를 생성
빈 오브젝트에 ArrowGenerator 스크립트 적용

 

5.7.7 제너레이터 스크립트에 프리팹 전달하기

  • 스크립트 내의 변수에 오브젝트 실체를 대입(연결)할 수 있게 하는 매우 편리한 방법을 사용
  • 이 방법을  : 아웃렛 접속(콘센트에서 플러그를 꽂는 구멍)
  • 스크립트 쪽에 플러그를 꽂을 수 있는 콘센트 구멍을 준비

※ 아웃렛 접속

  1. 스크립트 쪽에 콘센트 구멍을 만들어야 하므로 스크립트 변수 앞에 public 접근 수식자를 붙인다.
  2. public 접근 수식자를 붙인 변수가 Inspector 창에 보인다.
  3. Inspector 창의 콘센트 구멍에 대입할 오브젝트를 끼운다( Drag & Drop 해서 넣는다)

 

콘센트 구멍 만들기

  • 아웃렛 접속을 이용해 arrowPrefab 변수에 프리팹 실체를 대입

ArrowGenerator 에 ArrowPrefab 변수가 보인다.
다음과 같은 방식으로 instnace가 생성된다.

 

반응형