好吧,我试图在每次触发时从剪辑中的不同位置(偏移)从 C# 中的 Unity 动画控制器启动我的动画剪辑,但我不明白循环偏移如何工作(清楚)和我的剪辑无论如何,aways似乎要从头开始。
我所拥有的是一个步行周期,它由布尔值触发,具体取决于角色是否正在移动,但我试图让角色交替(让它播放完整的步行周期,但通过自它开始播放的动画的增量)仅当角色移动时播放)他们的左右脚步。不然看起来很奇怪
我尝试做到这一点的方法是拥有一个浮动并在每次移动时增加该浮动,并将该浮动分配给我的动画的循环偏移量。这样,我认为下次触发动画时,它将从上次停止的地方开始。
我不确定偏移量是指时间、帧还是百分比,所以到目前为止我刚刚这样做了:
if (animOffset >= 1f) { //was full clip
animOffset = 0.0f;
}
//anim help
currentPos = transform.position;
if (currentPos != lastPos) {
//print ("moving now");
animator.SetBool ("isWalking", true);
if (InputManager.stepCount % 2 != 0) {
print ("moving right");
animator.SetFloat ("walkOffset",animOffset);
} else {
print ("moving left");
animator.SetFloat ("walkOffset",animOffset);
}
animOffset += 0.1f;
} else {
animator.SetBool ("isWalking", false);
}
lastPos = currentPos;
问题是我没有获得所需的效果,并且查看动画控制器,剪辑似乎总是从头开始,请参阅:
蓝色小条总是从头开始。我在这里做错了什么?如何获得准确的运行周期偏移?
您可以将动画上的“循环偏移”链接到动画器上的参数(在本例中我称为
Offset
)。然后你可以在代码中设置这个参数:
这是动画窗口(忽略速度,这里不需要)。我只有一种状态
OnState
。
这是
OnState
状态的检查器窗口。我勾选了“循环偏移”旁边的 Parameter
,然后它让我选择我的参数 Offset
。
在这段代码中,我获取了动画师并设置了属性
Offset
,而该属性又可以通过编程方式或通过检查器进行设置。
public class MyObject : MonoBehaviour
{
public float Offset= 0f;
Animator animator;
void Awake()
{
animator = GetComponent<Animator>();
animator.SetFloat("Offset", Offset);
}
Offset 是一个介于 0 和 1 之间的值,因此您可以找到动画中 Feed 移动的位置,并将其设置为 0 和 1 的比例。
需要检查AnimationClip循环时间才能使用循环偏移,否则循环偏移不会产生任何效果。有效范围是 0 到 1.0。
确保动画剪辑上的循环时间已勾选,这为我解决了这个问题。否则,循环偏移根本不会影响动画。