1. 오늘의 활동
개 vs고양이라고 쓰긴 했지만, 조금 더 정확하게 하자면 몰려오는 고양이에게 밥을 줘서 쫓아내는(?) 게임이다.
어쩐지 고양이만 좋은 일 같지만, 아무튼 그렇다.
하지만 이걸 A부터 Z까지 만드는 과정을 전부 말하라고 하면 하나로는 부족하다.
그러므로, 이번에는 Unity의 구성요소 중 'Prefab'을 살피는 것에 중점을 두기로 할 것이다.
2. 살펴보기
'Prefab' 을 찾기 전, 우선 전체적인 구성을 보자.
그런데 이제, 보다시피. project칸에도 뭐가 많고… 전반적으로 뭔가 많다.
심지어 게임 실행하면 옆에 오브젝트들이 자꾸 나왔다 들어갔다 (반복)한다.
여기서 뭐가 'Prefab'일까?
바로, 영상 오른편에 (Clone)을 달고 계속 나타나는 놈들이 Prefab이다.
◆ Prefabs (프리팹)?
여기, Project 칸(우측 세로 3줄 중에서 중앙)에 보면 자기들끼리 파란색으로 반짝거리는 것들이다.
얘네들을 'Prefab(프리팹)'이라고 부른다.
본래 'Prefab' 이라는 단어의 뜻은 '조립식 건축의 부품'을 의미한다.
즉, 이것들은 게임에 들어가는 '부품'과도 같은 뜻으로 사용한다.
◆그럼 프리팹은 왜 만드는가?
가장 큰 이유는 '같은 오브젝트들을 반복 생산하기 위함' 이다.
당장 위의 영상을 보면, 계속해서 고양이들이 내려오고, 강아지가 먹이를 계속 쏘아댄다.
그리고 Prefabs 폴더 아래를 보면 내가 만들어놓은 3종류의 Cat과 Food라는 이름의 프리팹이 보인다.프리팹을 만들고 스크립트를 통해, 게임이 진행되는 동안 계속해서 같은 오브젝트를 재생성하게 만든 것이다.
if. 프리팹이 없었다면?
저걸 하나하나 빚는 것은 불가능하고, 그렇게 해야 한다면 우리가 지금 하는 게임은 태어나지 못했을 것이다. 가장 간단한 게임도 아주아주 용량이 커질 것이다. (최소한, 슈팅/탄막게임과 RPG게임은 사라질 것이다.) 만약 계속 복사/붙여 넣기를 잔뜩 해두었더라도, 어느 시점에서는 오브젝트가 만들어질 수 없으니 게임이 끝나버릴 것이다.
◆프리팹은 어떻게 만들까?
프리팹을 만드는 방법은 간단하다.
1. 오브젝트를 만든다.
(오브젝트 아래에 들어간 요소들까지 전부 프리팹으로 만들어진다. 필요한 요소는 충분히 만들어두자.)
2. 프로젝트 폴더에 드래그&드롭한다.
(어떤 폴더에 넣어도 프리팹이 되지만, 프리팹들끼리 따로 모아두기 위해 Prefabs폴더를 만들어 거기다 넣는다.)
오브젝트는 내가 만들 게임의 요소에 따라 달라지지만, 아무튼 구성을 어느 정도 해두면 일단 만들어두면 된다.
어차피 나중에 프리팹의 설정이 바뀌면 덮어쓰기 할 수 있다.
3. 원본을 지운다.
프리팹을 만들면 이렇게 계속 남아 있을 텐데, 특별한 이유가 있는 게 아니라면, 미련 갖지 말고 지워주면 된다.
Q. 왜 지우나요?
프리팹은 '반복적으로 생성' 하기 위해 주로 사용한다. 그리고 보통 스크립트에 '어느 범위에서 생성 될지'도 정해둔다.그런데 지우지 않으면? 화면 중간에 떡하니 있던 몹이나 탄환 등이 갑자기 저 '범위'로 이동해서 떨어지게 된다.갑자기 순간이동을 해버리는 오브젝트는 역시 부자연스럽기 때문에, 처음부터 지워두는 게 좋다.
◆그럼 프리팹은 어떻게 적용하나요?
'반복해서 생성'시키려는 로직을 쓰려면, 우리는 스크립트를 써야한다.
보통 이런 '생성'로직은 C#스크립트에서 작성하게 된다.
프리팹을 만들어내는 것이 어느 객체를 따라가느냐에 따라서, 생성로직을 짤 곳을 정하면 된다.
(예시: 게임 전반에서 나타나는 객체는 '게임 매니저', 특정 캐릭터에게서 만들어지는 객체는 해당 '캐릭터'의 스크립트에 들어간다.)
(그렇기에 위의 게임에서는 고양이 생성 로직은 게임매니저에, 날아가는 사료가 만들어지는 로직은 Dog에 들어가있다.)
스크립트를 열면 public class~~뭐라고도 나오고 void 뭐라고도 쭉 나올텐데, 우리가 넣을 프리팹은 '게임 오브젝트'이다.
그러니 우리는 게임 오브젝트를 넣을 '칸'을 만들어줘야한다.
만약 Test라는 스크립트와, Item이라는 이름의 칸을 만든다고 하자.
~ class 라고 적힌 곳 바로 밑에, 이렇게 작성한다.
public GameObject(불러올 유형) Item(칸의 이름);
그리고 이 스크립트를 저장해서 Test스크립트를 게임 오브젝트에 넣으면, 해당 오브젝트 창에 이렇게 뜬다.
게임 오브젝트를 넣을 수 있는 '칸'이 생성된다!
저 빈칸에, 내가 넣고자 하는 프리팹을 넣으면, 이제 해당 스크립트는 설정된 오브젝트를 불러낼 수 있다.
그럼 저 프리팹을 어떻게 불러낼 수 있는가? 바로 'Instantiate()' 를 사용한다.
//void 뒤의 이름은 뭐라도 괜찮다. 하지만, 가능한 해당 void칸의 역할을 쉽게 알 수 있도록 적어주자.
void MakeItem()
{
Instantiate(Item); //해당 오브젝트를 적용한 칸 이름을 적어준다.
}
이렇게 만들면, 프리팹이 생성된다. 그렇게 생성된 프리팹은, 각자 자신의 안에 있는 스크립트에 따라 열심히 움직이게 된다.
3. 마무리
오늘은 이렇게 간단하게 unity의 기능 중 'Prefabs'에 대해 살펴보았다.
그리고 이것으로 사전캠프도 끝났다!
다음 주부터 오전 9시부터 오후 9시까지. 힘내겠습니다.
'Unity_사전캠프' 카테고리의 다른 글
[사전캠프 14일차] 게임 속의 상호작용 분석 (0) | 2025.04.03 |
---|---|
[사전캠프 13일차] 복습노트 (0) | 2025.04.02 |
[사전캠프 12일차] 숫자야구 (0) | 2025.04.01 |
[사전캠프 11일 차] 오목 게임 기획 (팀플) (0) | 2025.03.31 |
[사전캠프 10일차] 행맨-2 (0) | 2025.03.28 |