게임은 개발한다면 다양한 몬스터가 존재할 텐데
게임하다보면 몬스터가 사람처럼 움직이는 것을 당연하게 생각할 수도 있지만
몬스터 하나 만드는데 정말로 많은 컴포넌트와 여러 게임 오브젝트가 융합된 형태로 되어있습니다.
이것은 게임 오브젝트에서 부모와 자식관계 개념까지 갑니다.
이걸 캐릭터마다 일일히 하나씩 다 만들려면 RPG나 무쌍류 게임은 100년이 지나도 못 만들 것입니다.
그래서 프리팹이라는 개념을 알아야 합니다.
프리팹은 설계도라고 보시면 됩니다.
같은 몬스터를 만드는데 굳이 일일히 만드는 것은 번거롭기 때문에
프리팹을 통해 같은 성질을 가진 오브젝트의 틀을 만들어 간단히 바꿀 수 있도록 만들어줍니다.
프리팹도 디자인패턴의 일종인데 프로토타입 패턴으로 구현되어 있는 기능이라고 보시면 됩니다.
🔊 프리팹의 장점
✅ 재사용성
한 번 만든 오브젝트를 여러 군데에서 재사용 가능하다.
✅ 수정 편의성
원본 프리팹을 수정하면, 그걸 사용하는 모든 인스턴스에 자동으로 반영된다.
✅ 일관성 유지
같은 구조와 컴포넌트를 가진 오브젝트를 계속 만들 수 있음

만든 오브젝트를 Project에 드래그로 끌고오면 이렇게 보일 것입니다.
이렇게 하면 프리팹이 적용됩니다.

더블클릭해서 들어가면 프리팹의 설계도를 변경하는 화면이 나옵니다.

간단하게 이렇게 바꾼다고 설계했을 때

해당 화면과 같이 프리팹을 적용한 모든 오브젝트가 똑같이 바뀌는 것을 볼 수 있습니다!
유니티에서 드래그로 배치도 가능하고 코드를 통해 배치 할 수도 있습니다.
public GameObject zombiePrefab; // 좀비 몬스터를 만들었다고 가정한다면...
void SpawnZombie() // 좀비를 배치하는 함수
{
Instantiate(zombiePrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
✅ Instantiate(...)
→ 새로운 오브젝트를 생성하는 함수
💡 만약 지우고 싶다면?
Destroy(...)
→ 오브젝트를 삭제하는 기능
→ 시간이 지난 후에 삭제 되도록 만들 수도 있음 : Destroy(GameObject , 3)
✅ new Vector3(0, 0, 0)
→ 생성될 위치 (x=0, y=0, z=0)
✅ Quaternion.identity
→ 정방향으로 위치시킨다는 뜻
→ x축, y축, z축 회전이 모두 0도
💡 만약 회전값을 넣고 싶다면?
Quaternion.Euler(0, 90, 0)
→ x축으로 0도, y축으로 90도, z축으로 0도 회전
→ 오브젝트를 y축 기준으로 오른쪽으로 90도 돌려서 생성하는 코드
💡 언제 사용하나?
몬스터가 플레이어 쪽을 보게 하고 싶을 때
총알 방향을 바꾸고 싶을 때
문을 구현하고 싶을 때 (문은 붙어 있고 힌지를 기준으로 좌우로 회전해서 열리는 것을 구현)