Unity

[Unity] 3D문 회전&Prefab 인스턴스 언패킹

시카Dev 2023. 11. 22. 10:21

* 2023. 1. 17. 22:31에 작성되었던 글입니다.

유니티 3D로 문이 열리는 환경을 만들어볼려고 합니다.

단순히 문 오브젝트의 y축을 회전시키면 되지 않을까 싶지만 그런 방법으로 해결되었다면 글을 쓸 이유가 없었읍니다..

만약 문 오브젝트의 y축을 회전시킨다면 정말 그 자리에서 빙글빙글 돌기 때문에, 한쪽에 경첩이 달려있는 현실적인 문처럼 나오지 않습니다.

(마치 어떤 사람에게 '한바퀴 돌고 와!' 라고 오더를 내렸는데 제자리에서 빙글 돈다면 매우 난처하겟죠..)

그러니까.. 따로 축을 설정해 줘야합니다


1. 3D 문 회전

저는 냉장고 에셋의 문을 열어볼 생각입니당.

참고로 여는 문이 위 아래로 두개입니다!

여튼 문 두개를 클릭합니다

 

두개를 동시에 클릭한 상태에서 마우스 우클릭을 하여 'Create Empty' 클릭합니다

그럼 하위 폴더에 'GameObject' 라는것이 생깁니다.

클릭했던 냉장고 문의 x축과 z축이 같기 때문에, 이 오브젝트를 냉장고의 축으로 사용할려고 합니다

여기서 중요한 것은.. 이 오브젝트를 상위 폴더로 올려보내고, 냉장고 문 오브젝트를 그 폴더 안에 넣어야 합니다.

상위 폴더의 좌표축을 수정하면 안에 담겨진 오브젝트들도 영향을 받기 때문입니다 (서로 독립적이지 않음)


2. Prefab 인스턴스 언패킹

그래서 GameObject를 상위로 올려보내려는데...

'Cannot restructure Prefab instance' 에러가 떴네요

이는 만들어놓은 프리팹에서 수정을 가할때 나타나는 건데, 유니티 공식 문서에 따르면 이 문구는 '프리팹 인스턴스의 자식은 삭제하거나 이동할 수 없으며 구성 요소를 재정렬할 수 없다.' 라고 합니다.

그림쟁이에게 맞춤 비유를 하자면 '님 레이어들 폴더 하나로 묶여져 있는데 여기 안에 있는 레이어들 삭제, 수정, 순서 바꾸기 불가능함.' 이런 뜻인것 같습니다

그래서 맨 상위 폴더를 마우스 우클릭하여

Prefab - Unpack Comletely 을 누르고, Prefab을 해체했습니다. 압축 해제와 비슷한 기능이라고 생각되네요

이후 다행히 'GameObject'를 상위 폴더로 옮길수 있었고 그 안에 냉장고 위아래 문 두개를 넣었습니다. 그리고 GameObject → Refrigerator_Door_Axis 으로 이름을 변경했습니다

앞으론 이 폴더가 냉장고의 회전축을 담당하게 됩니다

회전축 폴더의 y축을 230으로 설정했더니 문이 열려졌습니다! x축과 z축은 건들지 않았고 반대로 y축을 0으로 두면 다시 닫힙니다

추가로 냉장고 안에 Spotlight를 추가하며 문이 열려지면 빛이 보이도록 했습니다.

앞으로 스크립트를 작성할때 (0, 230, 0)으로 오브젝트를 설정하면 문이 다시 열려지겠네용

 

뒤에 있는 외부쪽 문도 똑같이 회전축을 설치했습니다!

문이 열리면 바깥맵과 햇빛을 볼수 있슴당

그리고 지금 집안 내부 테두리에 빛이 새어들어오는데(왜그런지 모르겠음, 전엔 안그랬음) 다음으로 고쳐야할 오류 되시겠다,, 흑흑


해결방법 세줄요약

  1. 문을 회전시키기 위해서 하나의 축이 필요하다
  2. 회전시킬 문을 클릭하고 Create Empty 를 누른다. 생긴 GameObject를 상위 폴더로 올리고, 그 안에 회전시킬 문 오브젝트를 넣는다
  3. Prefab 인스턴스 언패킹 에러 메세지가 뜨면 상위 폴더의 Prefab을 해제한다