prefab이란 단어는 사실 건축용어인데 빌려왔다.
Unity에서는 프리팹은 재사용, reuse을 효율적으로 하기 위해 만든다고 보면 된다.
건축에서와 마찬가지의 뜻이다.
하지만 Duplicate로 재사용하면 되지 않느냐...? 라고 할 수 있다.
Duplicate를 동적으로 수행할 수 있을까?? 음.. 안해봤는데 어려울듯
이를 해결할 수 있는게 바로 Prefab이다.
그렇다면 Prefab은 어떻게 만드느냐?
얘네들의 차이점이 무엇일까?
맨 앞에 육면체 색깔이 다르다.
그렇다면 왜 다를까?
결론부터 말하자면 파란 애들이 바로 Prefab된 애들이다.
얘네들은 Asset으로 저장되어 언제든지 불러올 수 있으며 만약 수정을 하면 불러올 때는 수정된 이후의 정보들로 불러와진다. -> 재사용 용이(reusable)
**반대로 Scene의 Instance를 수정한다 해도 원본 Prefab은 변화가 없다.
우리는 Prefab을 Scene에 끌어와 쓸 수 있는데 이 때 만들어진 오브젝트를
Prefab Instance라고 부른다.
Prefab의 기능이 또 뭐있는데??
Prefab을 누르면, 즉 인스턴스들을 누르면 Inspector Window에 새로운 줄이 생긴다.
Prefab bar가 생긴다.
Open, Select, Override가 있다.
-
Open은 Original Prefab을 수정하는 Wizard를 열어준다. (사실 Open 필요없고 그냥 원본파일 더블클릭하면됨)
이 마법사는 해당 프리팹부터 Children 까지, 즉 자식 프리팹까지 수정할 수 있게 해준다.
** Auto Save를 키면 당연히 수정내용이 바로 반영된다.
-
Select는 정말 Select다. 해당 원본 프리팹이 선택된다.
-
Override는 바로 덮어씌우기라고 생각하면 되는데 약간 좀 다르다.
원본 파일과 달라진 점을 보여준다.
없으면 No Overrides라고 뜬다.
만약 Override 상태면 Revert all 버튼이라는 것이 생기는데.
초기화시키는 버튼이다. 수정된 인스턴스들의 값을 다시 원본과 같게 만들어주는 것이다.
Apply all 하면 정말 반대가 된다.
수정된 인스턴스들의 값이 원본으로 저장된다. 덮어쓰기가 된다.
그래서 어떻게 활용하느냐?
원본프리팹은 직접 활용을 못한다. 우리는 그 인스턴스들만 쓸 수 있다.
그래서 어떻게 쓰냐고??
인스턴스화라는 것을 해서 쓴다. (Instantiate)
일반적으로 스크립트를 이용해 생성된다.
내가 쓴 것을 잠깐 빌리자면
public class PlayerController : MonoBehaviour
{
public GameObject projectilePrefab;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//Launch a projectile from the player
Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
}
}
}
다 자르고 인스턴스랑 관계된 것만 남겼다.
GameObject로 Prefab을 선언하고 할당한다음에
Instatiate를 해주면 Instance가 생성된다.
*Component에스크립트를 추가시켜서 만든다.
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
정해진 시간마다 Method 실행시키기 [Unity] (0) | 2021.02.25 |
---|---|
Prefab,프리팹을 이용해서 Random Spawn, 랜덤 생성해보기 [Unity] (0) | 2021.02.25 |
Update(), FixedUpdate(), LateUpdate()의 차이 [Unity] (0) | 2021.02.24 |
GameObject 움직이는 여러가지 방법 [Unity] (0) | 2021.02.24 |
GameObject 자연스럽게 회전시키기 [Unity 3D] (0) | 2021.02.23 |