유니티

유니티 - 프리펩 Variant

bugmin 2024. 7. 3. 23:56

프리펩 중첩

 

플레이어 프리펩이 있고 안에 메쉬가 있는데 이 메쉬를 다른 프리펩으로 바꿔보자

 

이렇게 되면 중첩 프리펩이 되는데

이렇게 했을 때 장점은 NewPlayerMesh 프리펩을 수정시 Player 프리펩을 사용하는 모든 애들한테 쉽게 반영이 되도록 할 수 있다.

 

하지만 해당 중첩 프리펩을 이용한 애들이 온전히 같은 모양을 하고 있을 땐 유용할 지 몰라도 각각에 차이를 줘야할 때가 있을 것이다.

 

그럴 때 중첩된 프리펩을 각각에서 수정 시엔 Override를 하고 싶지 않은데 아래와 같이 빨간색 -표시, 초록색 +가 뜨는 문제가 있다.

원본 프리펩엔 Coroutine 스크립트가 있는데 없애면 빨간색 - 표시가 뜬다.
원본 프리펩엔 Coroutine 스크립트가 없는데 만들면 녹색 + 표시가 뜸

 

물론 실행에는 문제가 없지만 나에겐 거슬리는 부분이라 개인적으론 중첩프리펩은 잘 사용하지 않고 프리펩을 언팩하여 사용한다.

 

다만 이렇게한 언팩하여 사용한다면 프리펩 끼리 공유하는 공통적인 부분일 경우 각각의 프리펩을 수정해야 한다는 문제점이 있다. 그것을 위한 해결책이 아래 소개되는 Prefab Variant 이다.

 

Prefab Variant

 

Variant는 변종 뜻으로 순화해서 말하면 변형 정도로 이해해볼 수 있겠다.

프리펩 변형을 위해선 프로젝트 창에서 기존의 프리펩을 선택후 Create - Prefab Variant를 누른다.

 

이렇게 프리펩 변형으로 만든 애들의 경우 아이콘이 일반적인 프리펩과 약간 차이가 있는 것을 알 수 있다.

 

 

혹은 하이레키 창서 원본 프리펩을 눌러 수정을 한다음에 파일화 시키면 알아서 위와 같이 오리지널로 할지 Variant로 할 지 묻는 창이 나오니 선택하면 된다.

 

원본 프리펩을 보유한 프리펩 Variant를 만들면 프리펩을 만들면 원본의 변경사항이 Variant에 공유가 되기 때문에 편하다.

 

프리펩의 뼈대는 그대로 공유를 한다보면 된다. 뼈대에 변화가 생기면 자식들에게도 그 변화가 적용된다.

물론 어떤 Variant에선 그 변화를 받아들이기 싫을 수도 있다 그럴 땐 그냥 해당 프리펩서 변화를 수정하면 그만이다.

근데 그럴거면 굳이 Variant로 할 이유가 있을까..

 

쉽게 말해 원본과 공유하고 있는 공통적인 부분이 있다면 원본의 변화가 Variant에게도 적용이 된다는 것이고 Variant가 가지고 있지 않은 것을 원본에 추가하면 Variant도 가지게 된다.

 

원본에서 자식과 공유하고 있는 것을 수정 시 공통으로 적용되기에

만일 스크립트가 전부 같은데 외형만 다른 케이스가 있다면 유용하게 쓸 수가 있다.

원본 하나만 수정하면 전부 수정되기 때문이다.

 

 

추가적으로 Variant에서 값을 수정하면 파란색 바와 글자가 Bold 처리되어 원본과 어디서 차이가 있는 지 오버라이드 된 부분을 알 수 있다.

보면 스케일과 X에 볼드 처리 되어있기에 스케일의 X값을 수정했음을 알 수 있다.

 

 

볼드 처리된 해당 부분에 우클릭 후 Revert를 누르면 원본의 값으로 다시 돌아갈 수 있다.

 

또한 프리펩 Variant의 프리펩 Variant를 만들 수도 있다.

 

이러면 계층관계가 다소 헷갈릴 수가 있는데

 

Variant에서 인스팩터 창에서 Open을 누르면 어떤 원본 프리펩으로 간다.

 

만일 Variant의 Variant라면 Open을 계속 타고가면 가장 위의 계층의 프리펩을 만나게 된다.

그 흐름도는 씬바로 밑에 표시가 된다.

 

 

이렇게 타고 왔다가 다시 Variant로 돌아가고 싶다면 해당 화살표를 누르면 다시 Variant로 돌아간다.

 

허나 원본이 사라지면 대참사가 생길 수 있다는 건 유의하자