C# 单位偏移周期始终从开始开始?

C# 单位偏移周期始终从开始开始?,c#,animation,unity3d,C#,Animation,Unity3d,好的,每次触发时,我都试图从我的动画控制器Unity中的C#中的不同位置(偏移)启动我的动画剪辑,但我不理解循环偏移是如何工作的(很明显),我的剪辑似乎从一开始就开始了 我所拥有的是一个行走循环,由bool根据角色是否移动而设置,但我尝试让角色交替(让它播放完整的行走循环,但通过播放的动画增量,因为它仅在角色移动时播放)其左右步数。否则看起来很奇怪 我是如何做到这一点的,就是有一个浮动,并在它们移动时增加该浮动,然后将该浮动指定给动画的循环偏移量。这样,我想下次触发动画时,它将从停止的位置开始

好的,每次触发时,我都试图从我的动画控制器Unity中的C#中的不同位置(偏移)启动我的动画剪辑,但我不理解循环偏移是如何工作的(很明显),我的剪辑似乎从一开始就开始了

我所拥有的是一个行走循环,由bool根据角色是否移动而设置,但我尝试让角色交替(让它播放完整的行走循环,但通过播放的动画增量,因为它仅在角色移动时播放)其左右步数。否则看起来很奇怪

我是如何做到这一点的,就是有一个浮动,并在它们移动时增加该浮动,然后将该浮动指定给动画的循环偏移量。这样,我想下次触发动画时,它将从停止的位置开始

我不确定偏移量指的是时间、帧还是百分比,所以到目前为止我只是这样做了:

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;
问题是,我没有获得所需的效果,并且看着动画控制器,似乎剪辑总是从头开始,请参见:


蓝色小条总是从头开始。我做错了什么?如何制作精确的运行循环偏移量?

这可能是您想要控制动画位置的原因。

您可以将动画上的“循环偏移量”链接到动画师上的参数(在本例中,我称之为
偏移量
)。然后可以在代码中设置此参数:

这是animator窗口(忽略速度,这里不需要)。我有一个状态
OnState

这是
OnState
状态的检查器窗口。我勾选了循环偏移旁边的
参数
,然后它让我选择我的参数
偏移

在这段代码中,我得到了动画师并设置了属性
Offset
,这可以通过编程或通过检查器进行设置

public class MyObject : MonoBehaviour
{
  public float Offset= 0f;
  Animator animator;

  void Awake()
  {
    animator = GetComponent<Animator>();
    animator.SetFloat("Offset", Offset);
  }
公共类MyObject:单行为
{
公共浮动偏移量=0f;
动画师;
无效唤醒()
{

animator=GetComponent,因此您可以在动画中找到提要移动的位置,并将其设置为0和1的比例。

“我不确定偏移量是指时间、帧还是百分比”,它指的是百分比(0..1.0)