Animation 如何获取特定动画帧的骨骼变换

Animation 如何获取特定动画帧的骨骼变换,animation,unity3d,Animation,Unity3d,我有一个大约20帧的动画。我需要能够访问给定动画帧中每个骨骼的局部变换。我知道如何访问骨骼及其局部变换(代码示例) 所有这些都很好,但我不知道我得到的值来自哪个动画帧?我假设它来自第1帧(可以使用调试器进行验证,但这不是重点) 问题是如何获取和设置特定帧的这些值?谢谢 像这样的东西应该可以用于获取当前变换: AnimationState state = animation["your_animation"]; state.enabled = true; state.normalizedTime

我有一个大约20帧的动画。我需要能够访问给定动画帧中每个骨骼的局部变换。我知道如何访问骨骼及其局部变换(代码示例)

所有这些都很好,但我不知道我得到的值来自哪个动画帧?我假设它来自第1帧(可以使用调试器进行验证,但这不是重点)


问题是如何获取和设置特定帧的这些值?谢谢

像这样的东西应该可以用于获取当前变换:

AnimationState state = animation["your_animation"];
state.enabled = true;
state.normalizedTime = (1.0f/totalAnimationTime) * specificFrame;
animation.Sample();

// get all transforms of this animation, extract your root and spine from here.
Transform[] transforms = animation.gameObject.GetComponentsInChildren<Transform>();
AnimationState=animation[“你的动画”];
state.enabled=true;
state.normalizedTime=(1.0f/totalAnimationTime)*特定帧;
animation.Sample();
//获取此动画的所有变换,从这里提取根和脊椎。
Transform[]transforms=animation.gameObject.GetComponentsInChildren();
或者,如果试图在动画运行时进行采样,可以执行以下操作:

if(animation["your_animation"].normalizedTime > 0.3 && animation["your_animation"].normalizedTime < 0.5) {
   //... do something at this point in time.  You'll have to figure out the frame
   //from the time
}
if(动画[“你的动画”].normalizedTime>0.3&&animation[“你的动画”].normalizedTime<0.5){
//…在这个时候做点什么。你必须弄清楚画面
//从那时起
}
上次我检查了你不能显式地提取一个特定的帧。但是,如果您知道动画的总长度(按时间计算),可以使用以下命令将动画移动到该点:
(1.0f/totalAnimationTime)*specificFrame(这假设关键帧的间距均匀。)


存储后,您应该能够直接修改转换,但我从未尝试过。

类似的内容应该可以用于获取当前转换:

AnimationState state = animation["your_animation"];
state.enabled = true;
state.normalizedTime = (1.0f/totalAnimationTime) * specificFrame;
animation.Sample();

// get all transforms of this animation, extract your root and spine from here.
Transform[] transforms = animation.gameObject.GetComponentsInChildren<Transform>();
AnimationState=animation[“你的动画”];
state.enabled=true;
state.normalizedTime=(1.0f/totalAnimationTime)*特定帧;
animation.Sample();
//获取此动画的所有变换,从这里提取根和脊椎。
Transform[]transforms=animation.gameObject.GetComponentsInChildren();
或者,如果试图在动画运行时进行采样,可以执行以下操作:

if(animation["your_animation"].normalizedTime > 0.3 && animation["your_animation"].normalizedTime < 0.5) {
   //... do something at this point in time.  You'll have to figure out the frame
   //from the time
}
if(动画[“你的动画”].normalizedTime>0.3&&animation[“你的动画”].normalizedTime<0.5){
//…在这个时候做点什么。你必须弄清楚画面
//从那时起
}
上次我检查了你不能显式地提取一个特定的帧。但是,如果您知道动画的总长度(按时间计算),可以使用以下命令将动画移动到该点:
(1.0f/totalAnimationTime)*specificFrame(这假设关键帧的间距均匀。)


存储后,您应该能够直接修改变换,但我从未尝试过。

我应该提到,我的动画是随fbx模型一起导入的,因此是一个剪辑而不是一个状态(或者是我做错了什么?)我应该提到的是,我的动画是随fbx模型一起导入的,因此是一个剪辑,而不是一个状态(或者是我做错了什么?)