본문 바로가기

Unity/3D

Unity3D - Animator와 SkinnedMeshRenderer에 대한 오해가능 요소

반응형

[사족]

 일이 바빠서 포스팅은 당분간 엄청 불규칙적이며, 정규적으로 올렸던 정보글도 일시중단입니다.

 

 

[들어가기 전]

 이 글은 두 컴포넌트가 무엇인지 자세히 다루는 것이 아닌, 작업자가 오해할 수 있는 요소들에 대한 글입니다.


Animator

정의

Bone에 대한 정보가 정의되어 있는 Avatar를 토대로 애니메이션을 재생할 수 있도록 도와주는 컴포넌트입니다.

메뉴얼의 Animator

API의 Animator

 

Avatar 교체하기

 Avatar에는 해당 캐릭터에 대한 Bone의 정보를 갖고있습니다. Bone들의 집합체인 root 오브젝트의 명칭, 각 Bone에 대한 명칭과 어느 부위에 해당하는지에 대한것이 명시되어있습니다. 따라서, Inspector에서 Avatar를 교체하면 Animator가 각 Bone을 인지 못하고 동작하지 못할 수 있습니다.

 

계층구조의 변경

 대부분 런타임 중에 Hierachy 상의 구조를 변경하거나 할 수 있습니다. 이 때 정상적으로 동작하지 않는다면 아래 코드를 이용해야 합니다. 

animator.Rebind(); 

 

RootBone과 Bone의 명칭 변경

 Avatar 교체하기에서도 언급했듯이  Avatar에 명시된 명칭과 달라지면서 본을 인지하지 못하게 됩니다.


Skinned Mesh Renderer

정의

 메쉬의 형태가 애니메이션(Bone)에 따라 움직이는 오브젝트의 렌더링을 위한 컴포넌트입니다.

메뉴얼의 SkinnedMeshRenderer

 

 

 

Mesh 교체하기

 많은 사람들이 해당 컴포넌트를 처음 접하고서 Mesh만 교체하면 정상적으로 렌더링 될 것이라 생각합니다. 하지만, Skinned Mesh Renderer는 Bone을 기준으로 형태가 변화하기에 Mesh에 맞는 Bone을 입력해줘야합니다.

 그리고 해당 Bone은 Inspector상에서 설정할수도 없고, Mesh와 함께있던 Bone들을 삭제했으면 Bone에 대한 정보도 사라져 정상적으로 정정작업을 할 수 없게됩니다.

 

bone 정보를 갖고있는 의상
bone 정보를 갖고있어 정상적으로 렌더링 된다.
Bone 정보를 소실한 상태

 

Script를 이용해 Mesh 재적용하기

 

 

 

 

반응형