Animator에 Avatar랑 AnimationController 붙이면 알아서 하위 오브젝트에서 SkinnedMeshRenderer 정보 참조해서 bone 정보를 업데이트하는 것 같음.
맹점은 Animator의 Animation Update와 Skinning Update를 Unity의 API를 가지고 제어가 가능한가 인데, 걍 다 만들어야 한다.
Animator.Update 함수는 메인쓰레드에서 돌도록 되어있어서 원래는 Animators.Update라는 함수로 여러 Animator에서 데이터 가져와서 Job 돌려서 병렬 처리해주는 게 안 돈다. 그래서 겁나 느리다.
오냐, 그러면 내가 직접 Bone 업데이트를 해주마, 하면서 낸 아이디어가 GameObject 깡통으로 하나 만들고 Animator 붙여놓는 것인데, 이러면 아래 SkinnedMeshRenderer가 없으니까 bone transform 업데이트가 안되긴 하더라. 근데 현재 재생중인 Clip 데이터를 가져와서 이 Clip 내부에 있는 position, rotation, scale 정보를 가지고 bone을 업데이트하려고 해도 Animation Curve 정보는 Editor에서만 가져올 수 있다. AnimationUtility가 UnityEditor 네임스페이스 내에 있다. 즉 런타임에서 깡통이 된다.
https://discussions.unity.com/t/reading-keyframe-curve-data-from-animator-at-runtime/741921/9
진짜 이 링크에 나온대로 미리 에디터에서 Curve 데이터 추출해서 사용자 정의 데이터로 저장해야지만 이 Clip의 데이터를 런타임에 쓸 수 있게 된다. 와.. 진짜 머리 한 대 쌔게 맞은 기분이다. 엔진 소스 코드 사서 쓰라고 일부러 블랙박스로 둔건가? 애니메이션이 게임에서 얼마나 코어한 시스템인데 이걸 다 숨겨놨다는 게..
일단 저 데이터를 빼서 저장해두면 쓸 수야 있겠는데... 결국 시스템 다 만들어야 한다. humunoid면 bone 이름이랑 관계없이 미리 정해진 개수의 순서를 이용해서 쓰면 될거고, generic으로 쓰면 bone 이름이 고유한 값일테니 그에 맞게 매핑하면 되긴 하겠다.
그래... 하라면 할 수는 있긴 하겠는데... 이럴거면 엔진을 그냥 만드는 게 낫지 않을까..?
'TA' 카테고리의 다른 글
텍스처 Block화 관련 추가적인 코멘트 (0) | 2025.05.25 |
---|---|
(작성중)[Unity] Custom Shadow System 제작하기 (3) - Shadow Map 샘플링 (0) | 2025.02.25 |
[Unity] Custom Shadow System 제작하기 (2) - Directional Light Shadow Map 그리기 (0) | 2025.02.15 |
(작성중) [Unity] URP환경에서 GPU Instancing Tool 만들기 (0) | 2025.01.20 |
[Unity] Custom Shadow System 제작하기 (1) - 커스텀 그림자 제작의 필요성 (0) | 2024.12.30 |