지금부터 만드는 똥 공장은 '양산 기계'가 '설계도'대로 '제품'을 생산하는 구조입니다.
유니티에서는 설계도를 프리팹이라고 부릅니다.
설계도(프리팹)을 양산 기계(제너레이터 스크립트)로 넘기면 설계도대로 제품을 생산해줍니다.
프리팹이 있으면 몇개라도 같은 오브젝트를 만들 수 있습니다.
예를 들어 게임 도중에 나타나는 적, 위에서 떨어지는 아이템, 토대가 되는 블록등 생각해 보면 많습니다.
프리팹과 단순 복사의 차이는 큽니다.
똥 인스턴스를 열 개 만든 다음 똥의 색을 검정색으로 바꾸려고 합니다. 단순 복사를 했다면
하나하나의 똥 색깔을 바꾸어줘야 합니다.
프리팹을 써서 복제를 했다면 프리팹 색만 바꿔도 모두 바뀝니다.
공장을 건설하는 순서는 프리팹(설계도)를 만들고, 제너레이터 스크립트를 만듭니다.
이어서 빈 오브젝트에 제너레이터 스크립트를 적용하고 마지막으로 제너레이터 스크립트에 프리팹을 전달해
공장을 완성시킵니다.
프리팹을 만들어보겠습니다.
만드는 방법은 간단합니다. 설계도로 쓰고 싶은 오브젝트를
[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, 7, 0);
}
}
}
|
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 교과서
'똥 싸기 > 유니티' 카테고리의 다른 글
[유니티]똥피하기 게임 만들기 - 감독 스크립트 만들기 (2) | 2017.08.14 |
---|---|
[유니티]똥피하기 게임 만들기 - HP 게이지 배치 (1) | 2017.08.14 |
[유니티]똥피하기 게임 만들기 - 충돌 판정 배우기 (0) | 2017.08.13 |
[유니티]똥피하기 게임 만들기 - 똥 배치하기 (0) | 2017.08.13 |
[유니티]똥피하기 게임 만들기 - 키로 캐릭터 움직이기 (0) | 2017.08.13 |