지금부터 만드는 똥 공장은 '양산 기계'가 '설계도'대로 '제품'을 생산하는 구조입니다.

 

 

 

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

 

설계도(프리팹)을 양산 기계(제너레이터 스크립트)로 넘기면 설계도대로 제품을 생산해줍니다.

 

프리팹이 있으면 몇개라도 같은 오브젝트를 만들 수 있습니다.

 

예를 들어 게임 도중에 나타나는 적, 위에서 떨어지는 아이템, 토대가 되는 블록등 생각해 보면 많습니다.

 

프리팹과 단순 복사의 차이는 큽니다.

 

똥 인스턴스를 열 개 만든 다음 똥의 색을 검정색으로 바꾸려고 합니다. 단순 복사를 했다면

 

하나하나의 똥 색깔을 바꾸어줘야 합니다.

 

프리팹을 써서 복제를 했다면 프리팹 색만 바꿔도 모두 바뀝니다.

 

공장을 건설하는 순서는 프리팹(설계도)를 만들고, 제너레이터 스크립트를 만듭니다.

 

이어서 빈 오브젝트에 제너레이터 스크립트를 적용하고 마지막으로 제너레이터 스크립트에 프리팹을 전달해

 

공장을 완성시킵니다.

 

 

 

프리팹을 만들어보겠습니다.

 

만드는 방법은 간단합니다. 설계도로 쓰고 싶은 오브젝트를

 

[Hierarchy] 뷰에서 Project 뷰로 드래그&드롭 하면 됩니다.

 

 

 

프리팹의 이름을 dongPrefab로 바꿉니다.

 

 

 

프리팹을 만들면 씬에 배치한 똥 오브젝트는 필요가 없어집니다.(설계도가 있으면 제품은 언제든지 만들 수 있다)

 

[Hierarchy]뷰에서 [dongPrefab]을 삭제합니다.

 

 

 

프리팹을 만들었으니 프리팹을 바탕으로 인스턴스를 양산하는 제너레이터 스크립트를 만들겠습니다.

 

C# 스크립트 생성해줍니다

 

DongGenerator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class DongGenerator : MonoBehaviour {
 
    public GameObject dongPrefab; //똥 프리팹을 넣을 변수선언
    float span = 1.0f;
    float delta = 0;
 
    void Update () {
        this.delta += Time.deltaTime;
        if (this.delta > this.span)
        {
            this.delta = 0;
            GameObject go = Instantiate(dongPrefab) as GameObject;
            int px = Random.Range(-6,7);
            go.transform.position = new Vector3(px, 70);
        }
    }
}
 
cs

 

11~21: 똥을 1초마다 한 개씩 생성하고 있습니다. Update 메소드에서 어떻게 1초마다를 셀 수 있을까요?

 

Update 메소드는 매 프레임마다 실행되고 앞 프레임과 현재 프레임의 시간 차이는 Time.deltaTime에 대입됩니다.

 

프레임과 프레임의 시간 차이를 delta 변수에 모으고 (+=)

 

합계 1초 이상이 되면 if절을 들어가게되고 delta변수는 0으로 바뀝니다.

 

똥 인스턴스는 16번 줄에서 Instantiate 메소드를 사용해 생성합니다.

 

Instantiate 메소드는 매개변수로 프리팹을 주면 반환 값으로 프리팹 인스턴스를 돌려줍니다.

 

똥의 X좌표는 -6부터 6까지 불규칙하게 위치하도록 Random클래스의 Range메소드를 사용합니다.

 

 

 

마지막으로 빈 오브젝트에 제너레이터 스크립트를 적용해보겠습니다.

 

먼저 [Hierarchy] 뷰에서 [Create]를 선택하고 [Create Empty]를 선택하여 빈 오브젝트를 만듭니다.

 

이름을 DongGenerator로 바꿔줍니다.

 

그 다음 [Project]뷰의 [DongGenerator] 스크립트를 [Hierarchy]뷰의 [DongGenerator]로 드래그&드롭합니다.

 

빈 오브젝트가 공장 오브젝트가 됩니다.

 

 

 

 

 

 

자 이제 거의 다왔습니다.

 

제너레이터 스크립트의 프리팹 변수에다가 프리팹의 실체를 넣어보도록 하겠습니다.

 

아웃렛 접속이라는 매우 중요한 방법을 소개하겠습니다.

 

아웃렛 접속은 스크립트의 변수에 오브젝트의 실체를 대입할 수 있게 하는 매우 편리한 방법입니다.

 

아웃렛 접속에서는 1. 스크립트 변수 앞에 public 선언을 합니다.

 

2. public 선언을 붙인 변수가 Inspector에 보이게 됩니다.

 

3. Inspector에 대입할 오브젝트를 넣습니다.

 

 

[Hierarchy]뷰에서 [DongGenerator]를 선택하고, [Inspector]에서 dongPrefab을 선택해줍니다.

 

 

 

 

 

게임을 실행해보겠습니다 ㅎㅎ

 

 

 

 

참고도서 : 유니티5 교과서

+ Recent posts