unity 动画卡顿,操作角色时有卡手感

问题

        当操作一个角色连续进行一些动作时,如跳跃,攻击时,有时会出现卡手的感觉。

解决

        一般角色执行一个动作时,为了和动画配合和防止该动作再次执行打断上一个正在执行的动作,代码执行时会加上一个锁。

例如跳跃动作的执行

if(jumpStopped){

        jumpStart(); 执行跳跃

        jumpStopped = false;

        

        jumpStartAt = Time.time;

}

 这是为了防止这个跳跃动作在短时间内反复执行,同时也是为了和跳跃动画配合,一般解锁的时间和动画时间相等。

假如这个跳跃动画的时间是0.5s,解开锁的时间也是0.5s,解锁的代码如下所示,

if(!jumpStopped){

        if(Time.time >= jumpStartAt + 0.5s){

                jumpStopped = true;

        }

}

当跳跃动画播放结束的时候,这个跳跃动作的锁也解开了,可以再次执行跳跃动作,上述代码中是使用了时间作为开锁的条件,当然也可以使用其它的条件进行开锁,如检测角色在地面上的条件。

        现在回归主题,由上面介绍了给动作上锁和动画时间,现在想要解决问题还需要玩家的输入,玩家的输入是一个时间点。一般玩家操控角色执行一个跳跃动作后,玩家会从屏幕上角色的动画播放程度判断动画是否结束,当动画快要结束时,玩家要快速再次使角色跳跃,将输入space,但玩家的时机判断毕竟是有些偏差的,可能时机抓的没有那么准,这是的动画还没有结束,可能就差个0.09才结束,但是毕竟很接近了,这时玩家就觉得我明明已经在动画结束时再次跳跃动作了,为什么角色没有反应,可能玩家就感觉卡手了。

        

        由上述说明了解锁时间与动画时间相同,会由卡手的感觉。请想象一下解锁时间与动画时间配置不同情况,1.解锁时间大于动画时间情况,解锁时间1s,动画时0.5s,玩家看着跳跃动画结束了想要再次跳跃,按了space好一会角色都没反应.

2.解锁时间小于动画时间,解锁时间0.5s,动画时间1s,玩家在角色还没结束动画的时候,再次按了space输入,角色再次执行了跳跃.

        想要不卡手,第一种方法是使锁时间小于动画时间,第二中是使用输入缓冲,把输入从时间点变成时间段,如图

 使用缓冲输入

ExtendBuffer(){

        if(!buffering){

                buffering = true;

                bufferEndAt = Time.time + bufferDurationSecond;

        }

}

HandleBuffer(){

        if(buffering && jumpStopped){

                if(bufferEndAt > Time.time){

                        jumpStart();

                }else{ buffering = false }

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值