2015. 10. 16. 14:35ㆍ프로그래밍/Unity
유니티에서 프리팹은 상당히 유용하다
같은개체의 오브젝트를 여러개 찍어낼때라던가,
프로젝트 내 특정씬의 오브젝트를 다른 프로젝트로 이동시킬때.. (기존의 프로젝트를 조금만 가공하여 새로운 프로젝트를 만들려고 할때 의외로 많이 쓰인다..) 프리팹을 익스포트하고 임포트 시키는 방법으로...
그리고 이 이동 기능을 이용해서 여러명이 협력 작업을 할 수 있다. (같은 프로젝트로 동시에 다른 작업 후 가공한 오브젝트만 익스포트해서 한군데서 합친다..SVN작업은 같은씬을 동시에 고치면 충돌이 일어난다)
그런데 이렇게 이동을 하다보면 원치않는 결과가 생길때가 있다.
기존의 프리팹은 그대로두고 다른 프로젝트에서 가공한 프리팹을 추가하고 싶을때,
임포트시키면 새로운 프리팹이 추가되는 것이 아니라
기존의 프리팹을 수정하는 것이다.
이러한 문제를 발견하고 다각도로 시험해보았다.
1)프리팹 연결을 끊고 새로 프리팹을 만들어서 이동(이동은 익스포트-임포트로 한다)
== 기존프리팹이 변경된다.
2)프리팹 대상 오브젝트를 복사하여 이름을 바꾼뒤 새로운 프리팹으로 만들어서 이동
==원하는대로 새로운 프리팹으 추가된다.
3)프리팹의 이름을 변경하여 이동
==기존프리팹이 변경된다.
4)프리팹을 복제하여(프리팹 이름이 중복되어 다른이름으로 복제된다) 이동
==새로운 프리팹이 추가된다.
5)프리팹 대상 오브젝트의 이름을 바꾸어 새로운 프리팹을 만들어 이동
==새로운 프리팹이 추가된다.
6)프리팹대상 오브젝트를 복제하고 기존프리팹을 지운뒤 이름그대로 프리팹을 다시 만들어 이동
==기존프리팹이 변경된다.
몇가지 추가적인 실험 후에 내린 결론은..
프리팹은 생성당시의 대상의 이름으로 생성되며 유니티 내부에서 해당 이름으로 등록하여 관리한다. (임포트때 같은 이름의 프리팹은 동일 프리팹으로 간주하여 처리한다.)
이미 등록된 프리팹은 하이라키에서 임의로 이름을 변경하여도 기존이름으로 관리한다 (포인터처럼 주소값이 변하지는 않는듯)
그리고 위와같은 사항은 프리팹에 붙어있는 스크립트도 해당하는 것같다.
==>스크립트를 이름을 변경하여 (클래스명도 함께) 다른 프로젝트에 옮기면 새로운 스크립트가 생성되지만,
프리팹에 붙여서 사용했던 스크립트의 경우 이름을 변경하여도 같은 스크립트로 인식한다.
이러한 규칙들을 잘 생각하고 옮기지 않으면 바꾸고싶지 않은 기존파일에 덮어씌우는 결과를 초래할수 있으므로
임포트 시에는 항시 New 파일로 만드는지를 체크해보고 할것.
'프로그래밍 > Unity' 카테고리의 다른 글
유니티 최대 Frame 고정 (0) | 2016.01.27 |
---|---|
NGUI 스크롤 느려지는 현상 (재사용리스트를 사용하지 않고 기능 개선) (0) | 2016.01.14 |
Unity에서 Prefab 연결끊기 (0) | 2015.08.25 |
GetComponentsInChildren<>() 자식오브젝트에서 활성/비활성 컴포넌트 찾기 (0) | 2015.07.10 |
Audio Clip 이펙트음 설정 관련 주의사항 (0) | 2015.07.06 |