Prefab
- prefab은 객체지향에서의 class와 비슷한 친구이다.
오브젝트의 컴포넌트 / 프로퍼티를 에셋으로 저장하고, 이런 설계도를 필요에 따라 간단히 인스턴스 하는 기능이다.
오브젝트의 컴포넌트 / 프로퍼티를 에셋으로 저장하고, 이런 설계도를 필요에 따라 간단히 인스턴스 하는 기능이다.
-
Using prefab
- 오브젝트를 Hierarchy에서 project 뷰로 드래그 하는 것으로 프리펩 에셋으로 만들 수 있다. 또 반대로 프리펩 에셋을 Scene이나 Hierarchy로 드래그 하는 것으로 프리펩 에셋을 인스턴스 할 수 있다.프리팹 에셋을 편집하면 모든 packing된 오브젝트는 해당 편집이 적용된다. 이렇게 프리팹 에셋으로 packing되어 있는 오브젝트는 청색으로 이름을 갖고, 오브젝트를 우클릭 후 Unpacking prefab 하는 것으로 프리팹 에셋과의 연결을 끊을 수 있다.이름이 청색인 것은 이 오브젝트가 Prefab이거나 Model임을 나타낸다. 이는 inspector에서 확인 가능하다.프로젝트의 프리팹 에셋을 삭제하면 이것에 packing되어 있던 오브젝트의 이름이 적색이 된다. 또, inspector에서 Prefab이 아닌 Missing이라는 속성을 확인할 수 있을 것이다. 이때는 적색이 된 오브젝트를 다시 프로젝트로 드래그하여 프리팹 에셋을 생성하면 된다.프리팹 에셋을 삭제하면서 연결이 끊긴 인스턴스를 다시 프리팹으로 연결할 때는 어떤 속성도 변경하지 않고 에셋화 해야한다. 속성을 변경 후 에셋화 하면 변경된 속성을 갖는 새로운 프리팹 에셋이 생성되는 것 뿐이기 때문이다. -
Instance in Runtime
- 프리팹 에셋을 Runtime 도중 인스턴스하는 것은 Instantiate 메소드를 이용하면 된다.public GameObject A; Instantiate(A, new Vector3(0, 0, 0), Quaternion.identity); Inspector에서 접근할 수 있도록 public으로 GameObject 타입 A 변수를 선언하고 Instantiate 메소드를 호출 후 인자로 생성할 프리팹(A), 생성 위치, 생성 시 회전 값을 입력한다.Inspector에서 해당 script의 A 변수에 생성을 원하는 프리팹을 대입하고 해당 스크립트를 실행하는 것으로 인스턴스한다.Quaternion.identity은 회전 값 없음을 의미한다. Quaternion 값을 형식적으로 입력해야할 때 쓰이기도 한다.