유니티에서 프리팹은 상당히 유용하다 같은개체의 오브젝트를 여러개 찍어낼때라던가, 프로젝트 내 특정씬의 오브젝트를 다른 프로젝트로 이동시킬때.. (기존의 프로젝트를 조금만 가공하여 새로운 프로젝트를 만들려고 할때 의외로 많이 쓰인다..) 프리팹을 익스포트하고 임포트 시키는 방법으로... 그리고 이 이동 기능을 이용해서 여러명이 협력 작업을 할 수 있다. (같은 프로젝트로 동시에 다른 작업 후 가공한 오브젝트만 익스포트해서 한군데서 합친다..SVN작업은 같은씬을 동시에 고치면 충돌이 일어난다) 프로젝트의 프리팹을 다른 프로젝트에서 가공해서 기존프리팹은 그대로 두고 새로운 프리팹을 추가하고 싶다 그런데 이렇게 이동을 하다보면 원치않는 결과가 생길때가 있다. 기존의 프리팹은 그대로두고 다른 프로젝트에서 가공한 프리팹을 추가하고 싶을때, 임포트시키면 새로운 프리팹이 추가되는 것이 아니라 기존의 프리팹을 수정하는 것이다. 이러한 문제를 발견하고 다각도로 시험해보았다. 1)프리팹 연결을 끊고 새로 프리팹을 만들어서 이동(이동은 익스포트-임포트로 한다) == 기존프리팹이 변경된다. 2)프리팹 대상 오브젝트를 복사하여 이름을 바꾼뒤 새로운 프리팹으로 만들어서 이동 ==원하는대로 새로운 프리팹으 추가된다. 3)프리팹의 이름을 변경하여 이동 ==기존프리팹이 변경된다. 4)프리팹을 복제하여(프리팹 이름이 중복되어 다른이름으로 복제된다) 이동 ==새로운 프리팹이 추가된다. 5)프리팹 대상 오브젝트의 이름을 바꾸어 새로운 프리팹을 만들어 이동 ==새로운 프리팹이 추가된다. 6)프리팹대상 오브젝트를 복제하고 기존프리팹을 지운뒤 이름그대로 프리팹을 다시 만들어 이동 ==기존프리팹이 변경된다. 몇가지 추가적인 실험 후에 내린 결론은.. 프리팹은 생성당시의 대상의 이름으로 생성되며 유니티 내부에서 해당 이름으로 등록하여 관리한다. (임포트때 같은 이름의 프리팹은 동일 프리팹으로 간주하여 처리한다.) 이미 등록된 프리팹은 하이라키에서 임의로 이름을 변경하여도 기존이름으로 관리한다 (포인터처럼 주소값이 변하지는 않는듯) 그리고 위와같은 사항은 프리팹에 붙어있는 스크립트도 해당하는 것같다. ==>스크립트를 이름을 변경하여 (클래스명도 함께) 다른 프로젝트에 옮기면 새로운 스크립트가 생성되지만, 프리팹에 붙여서 사용했던 스크립트의 경우 이름을 변경하여도 같은 스크립트로 인식한다. 이러한 규칙들을 잘 생각하고 옮기지 않으면 바꾸고싶지 않은 기존파일에 덮어씌우는 결과를 초래할수 있으므로 임포트 시에는 항시 New 파일로 만드는지를 체크해보고 할것. AnyPortrait > 메뉴얼 > 프리팹 편집하기 프리팹 편집하기1.2.5 유니티로 게임을 만드는 과정에서 프리팹(Prefab)은 중요한 역할을 합니다.
AnyPortrait로 만든 캐릭터를 프리팹으로 저장한 화면입니다.
프리팹으로 저장된 캐릭터를 편집하려고 하면 안내 메시지가 나타납니다.
다시 Hierarchy를 확인하면 푸른색이 아닌 기본색으로 바뀌어 있음을 확인할 수 있습니다.
모든 편집이 끝나면 Apply 버튼을 눌러서 프리팹으로 다시 저장하면 됩니다. 주의 프리팹 상태 UI (v1.2.5) 저희 팀은 여러 사용자로부터 유니티 에디터상에서 프리팹을 다루는 것에 대해서 많은 피드백을 받았습니다.
(1) 캐릭터가 프리팹 에셋(Prefab Asset)의 형태로 저장된 상태입니다.
기존과 마찬가지로 프리팹 인스턴스 상태에서 AnyPortrait 에디터를 열어서 편집을 해봅시다.
캐릭터를 편집하고 Bake를 한 후, 다시 유니티 씬으로 돌아옵니다.
(1) Hierarchy에서의 GameObject들의 이름이 다시 푸른색으로 바뀌었습니다. 이제 "연결된 프리팹 인스턴스 상태"로 바뀐 것입니다.
v1.2.5에 추가된 프리팹 상태 UI입니다. 1. Source Prefab : 원본이 되는 프리팹 에셋입니다. 동기화가 되지 않았다면 어떤 상태인지 나타납니다. Unity 2018.3에 도입된 새로운 프리팹 시스템 Unity 2018.3에서는 새로운 프리팹 시스템이 도입되었습니다. 안타깝게도, 새로운 프리팹 시스템은 기존의 프리팹 시스템과 내부적으로 너무 큰 차이를 가지고 있어서, 하지만 위에서 소개된 프리팹 상태 UI를 이용하여 프리팹 에셋과의 연결 정보를 가능한 유지한 상태에서 동기화를 하는 것이 가능해졌습니다.
새로운 프리팹 시스템에서의 화면입니다.
프리팹 인스턴스를 선택하고 AnyPortrait 에디터로 편집하려고 하면, 기존과 마찬가지로 프리팹 에셋과의 연결이 해제된다는 메시지가 나타납니다.
Bake를 실행하고 유니티 씬으로 돌아오면 프리팹 에셋과의 연결이 해제되었으며, 프리팹 인스턴스 상태가 아닌 것을 볼 수 있습니다.
하지만 AnyPortrait 캐릭터를 선택하고 Inspector를 확인해보면 "프리팹 상태 UI"가 나타난 것을 볼 수 있습니다. (1) 프리팹 상태 UI에서 (2) Apply 버튼을 눌러봅시다.
(3) GameObject들이 다시 프리팹 인스턴스로 복구되었으며, 편집된 캐릭터가 프리팹 에셋으로 적용되어 동기화가 완료된 것을 볼 수 있습니다.
Unity 2018.3 및 이후 버전에서는 AnyPortrait로 편집된 캐릭터에
대해서 프리팹 연결 정보가 내부적으로 유지 되지 않지만, (1) Disconnect 버튼을 누르면 프리팹 에셋과의 동기화를 해제합니다. 하지만 연결 정보는 삭제하지 않으므로 다시 Apply를 눌러서 동기화를 수행할 수 있습니다. 주의 사항 새로운 프리팹 시스템의 가장 큰 특징 중 하나는 "프리팹 원본을 직접 편집"할 수 있다는 것입니다.
(1) 프리팹 에셋 원본을 선택하고, 프리팹 원본을 편집할 수 있는 상태로 전환합니다. 위와 같은 메시지는 Unity 2020.1 부터 나타나며, Unity 2018.3부터 Unity 2020.1 사이의 버전에서는 해당 메시지가 나타나지 않습니다. 하지만 이것은 해당 버전에서 "프리팹 에셋인지 프리팹 인스턴스인지 구분할 수 없기 때문"에
AnyPortrait로 편집할 수 있는 것처럼 보여질 뿐이며, 실제로 프리팹 원본을 편집하면 여러가지 문제들이 발생할 수 있습니다.
(1) 편집하고자 하는 프리팹 에셋을 선택하고 씬으로 배치합니다. |