在使用BlendShape动画模式创建骨骼动画,并导入Unity3D之后,模型内和骨骼关联的部分会被自动附加一个SkinnedMeshRenderer的脚本组件。
大家也许已经注意到了,在模型变化的过程中,虽然我们“看”到模型的形变,但是根源上模型的位置和碰撞体等并没有发生改变,因此在一些需要在模型细节处附加标签的项目,标签并不会随着“可见的”模型变化而移动。但在粗浅尝试后,我们封上提取模型变形之后组件位置的方法。此处有两种方法:
一, Collider on Skinned Mesh - Unity Answers,该方法能够获取变形后的完整Mesh,进而自行提取顶点位置或其他;缺点是烘焙耗能太高导致程序卡顿,通常建议手动触发
二, 笔者的方法分为2步骤:
① 在需要追踪位置的组件的SkinnedMeshRenderer上勾选updateWhenOffscreen,这样该组件的框架(bound)细节就会持续更新。
② 在代码中获取这个小组件的 SkinnedMeshRenderer.bounds.center来提取当下模型中小组件的中心位置。