[脚本] 关于动画片段时间长度不同的问题?
未解决
5
楼主悬赏蛮牛币
在脚本中通过animator.runtimeAnimatorController.Clips获取的动画片段集合中可以得到所需动画片段的时间长度。但是animation栏中查看此动画片段时间长度却和脚本中该动画片段的时间长度不同,并且通过一次动作播放测试发现animation栏中片段时长是正确的,为什么?怎么才能在animator中获取正确片段的时长?


  • 我来回答
    相同的啊,12帧=1秒,08帧刚好是0.6667秒
    引用: 和平源于力量 发表于 2019-8-2 13:19
    相同的啊,12帧=1秒,08帧刚好是0.6667秒

    因为我要在脚本中只播放一次开火动作,在1.08秒时间内正好可以播放一次,但是1.667秒就播放一次半了。怎么解决这个问题?

    actionTimer += Time.deltaTime;
    if (actionTimer < 1.08f)
    {
             Firing();
    }
    引用: 和平源于力量 发表于 2019-8-2 13:19
    相同的啊,12帧=1秒,08帧刚好是0.6667秒

    虽然1.08的意思是20帧=1.666667秒,但在脚本中使用1.08正好能播放一次,而使用1.666667秒却不想。
    引用: vdstudio 发表于 2019-8-3 07:01
    因为我要在脚本中只播放一次开火动作,在1.08秒时间内正好可以播放一次,但是1.667秒就播放一次半了。怎 ...

    我看你这动画长度就是1.666秒啊,不知道为啥1.6667秒会播一次半
    引用: 和平源于力量 发表于 2019-8-3 11:07
    我看你这动画长度就是1.666秒啊,不知道为啥1.6667秒会播一次半

    这部分脚本大概是这样的:
    ...
    Animator animtor;
    AnimationClip[] clips;

    animator = GetComponent<Animator>();
    clips = anim.runtimeAnimatorController.animationClips;
    ...
    foreach(AnimationClip c in clips)
    {
           if (c.name.Equals(clipName)) { clipTime = c.length; }
    }
    ...
    private void Update()
    {
        ...
        if (isFire)
        {
                actionTimer += Time.deltaTime;
                if (actionTimer < clipTime)
                {
                    Firing();
                }
                else
                {
                    isFire = false;
                    actionTimer = 0f;
                }
            }
        else
        {
                actionTimer += Time.deltaTime;
                if (actionTimer < clipTime)
                {
                    Idle();
                }
                else
                {
                    isFire = true;
                    actionTimer = 0f;               
                }
        }
        ...
    }

    public void Firing()
    {
        anim.SetInteger("animation_Int", 14);
    }
            clipTime得到的开枪动作时长是1.666667秒,本应只出现一次动作,但却是一次半。而把clipTime改成帧数1:08却正好播放一次。该片段帧速率是12,而1:08正好是20帧,20帧就是1.666667秒。怎么回事?