2020-12-30

转载至原文:https://blog.youkuaiyun.com/lingyanpi/article/details/76564977?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

 

想必用Unity开发的朋友们都知道一个知识点,Time.timeScale 用于控制整个游戏运行时的时间缩放,使用它可以调整时间的流动速度,设置为0时间静默,设置为1时间按照我们真实世界的时间速度流逝。
问题往往没有这么简单,我们在实际的开发过程中会遇到各种需求。最容易想到的一个需求就是战斗中的譬如大招技能的静默问题,描述起来就是,对于特定目标时间正常流动,而对于其他物体时间静止。难点就在于Time.scale 是一个全局的状态变量,它对游戏世界里面的所有物体的时间都有效,设置 Time.timeScale 为0,所有的物体的动画和粒子特效都将不会按照时间轴进行播放了。

需求情景

要想解决这个问题,我们直观的思路就是找到另外一个让时间轴“复苏”的属性,它可以让动画和粒子按照时间轴正常播放。庆幸的是Unity 给我们提供了这样的设计。

解决方案

废话说了这么多,我们迅速干活。以我方角色大招技能正常播放,其他物体动画特效静止为例,实现方案如下:

模拟Dotween这个Tween插件的时间线

比如dotween的缓动函数,是利用了Unity的Time.deltaTime的,所以受到Time.timeScale的影响。如果在静帧的时候,我们需要利用dotween来模拟缓动动画,如摄像机动画,就可以这样来模拟

针对序列Sequence

    private void SimulateDotweenTimeline(Sequence seq)
    {
        seq.SetUpdate(true);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

针对Tweener

    private void SimulateDotweenTimeline(Tweener tweener)
    {
        tweener.SetUpdate(true);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值