找回密码
 注册帐号

扫一扫,访问微社区

脚本 关于动画片段时间长度不同的问题?

5
回复
253
查看
[ 复制链接 ]
6蛮牛粉丝
1428/1500
排名
1262
昨日变化

1

主题

110

帖子

1428

积分

Rank: 6Rank: 6Rank: 6

UID
97400
好友
2
蛮牛币
3102
威望
0
注册时间
2015-5-4
在线时间
371 小时
最后登录
2019-8-9
2019-8-2 06:48:41 显示全部楼层 阅读模式
5蛮牛币
在脚本中通过animator.runtimeAnimatorController.animationClips获取的动画片段集合中可以得到所需动画片段的时间长度。但是animation栏中查看此动画片段时间长度却和脚本中该动画片段的时间长度不同,并且通过一次动作播放测试发现animation栏中片段时长是正确的,为什么?怎么才能在animator中获取正确片段的时长?


片段时长问题.png
回复

使用道具 举报

5熟悉之中
675/1000
排名
4938
昨日变化

1

主题

68

帖子

675

积分

Rank: 5Rank: 5

UID
257307
好友
0
蛮牛币
1174
威望
0
注册时间
2017-12-1
在线时间
302 小时
最后登录
2019-8-20
2019-8-2 13:19:06 显示全部楼层
相同的啊,12帧=1秒,08帧刚好是0.6667秒
回复

使用道具 举报

6蛮牛粉丝
1428/1500
排名
1262
昨日变化

1

主题

110

帖子

1428

积分

Rank: 6Rank: 6Rank: 6

UID
97400
好友
2
蛮牛币
3102
威望
0
注册时间
2015-5-4
在线时间
371 小时
最后登录
2019-8-9
楼主 2019-8-3 07:01:00 显示全部楼层
和平源于力量 发表于 2019-8-2 13:19
相同的啊,12帧=1秒,08帧刚好是0.6667秒

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

actionTimer += Time.deltaTime;
if (actionTimer < 1.08f)
{
         Firing();
}
回复

使用道具 举报

6蛮牛粉丝
1428/1500
排名
1262
昨日变化

1

主题

110

帖子

1428

积分

Rank: 6Rank: 6Rank: 6

UID
97400
好友
2
蛮牛币
3102
威望
0
注册时间
2015-5-4
在线时间
371 小时
最后登录
2019-8-9
楼主 2019-8-3 09:14:10 显示全部楼层
和平源于力量 发表于 2019-8-2 13:19
相同的啊,12帧=1秒,08帧刚好是0.6667秒

虽然1.08的意思是20帧=1.666667秒,但在脚本中使用1.08正好能播放一次,而使用1.666667秒却不想。
回复

使用道具 举报

5熟悉之中
675/1000
排名
4938
昨日变化

1

主题

68

帖子

675

积分

Rank: 5Rank: 5

UID
257307
好友
0
蛮牛币
1174
威望
0
注册时间
2017-12-1
在线时间
302 小时
最后登录
2019-8-20
2019-8-3 11:07:13 显示全部楼层
vdstudio 发表于 2019-8-3 07:01
因为我要在脚本中只播放一次开火动作,在1.08秒时间内正好可以播放一次,但是1.667秒就播放一次半了。怎 ...

我看你这动画长度就是1.666秒啊,不知道为啥1.6667秒会播一次半
回复

使用道具 举报

6蛮牛粉丝
1428/1500
排名
1262
昨日变化

1

主题

110

帖子

1428

积分

Rank: 6Rank: 6Rank: 6

UID
97400
好友
2
蛮牛币
3102
威望
0
注册时间
2015-5-4
在线时间
371 小时
最后登录
2019-8-9
楼主 2019-8-4 07:21:35 显示全部楼层
和平源于力量 发表于 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秒。怎么回事?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则