关于对SWS插件的一些扩展

最近用unity写物体按照一定路线运动的一些内容,中间接触到了SWS这个插件。这个插件是基于DoTween来实现的,性能优化的不错,推荐一下。但插件中忽略了一个问题,如果运动过程中,游戏被切到后台(后台被挂起没有运行),切回来之后按理说物体的运动的位置应该发生改变了,但是这个插件并没有提供。因此,决定改写一下,来完善这个功能。

以splineMove为例进行扩展:

1:定义脚本继承splineMove
public class ExSplineMove : splineMove
{
}
2:定义物体运动的初始时间,并在开始的时候初始化它
 public long createTime { get; set; }
    // Use this for initialization
    private void Start()
    {
        createTime = DateTime.Now.Ticks;
        if (onStart)//这个是splineMove原有的,拷贝它
            StartMove();
    }
3:添加变量来判定,切换到主屏幕后,是否按照时间同步
public bool SynTime;//时间是否同步
4:定义刷新位置的方法
private void RefreshPosition()
    {
        float lifeTime = (DateTime.Now.Ticks - createTime) / 10000000.0f;//转换成秒
        float totalTime = WaypointManager.GetPathLength(pathContainer.GetPathPoints()) / speed;//获取运动的总时间
        if (tween == null)
        {
            return;
        }
        tween.ForceInit();
        tween.Goto(lifeTime, true);//迫使运动到具体的时间应到的位置
    }
5:最后再加上切换到主屏幕监听
private void OnApplicationFocus(bool hasFocus)
    {
        if (hasFocus&&SynTime/*按照自己的需求,看是否需要按照时间同步*/)
        {
            RefreshPosition();//刷新物体的位置
        }
    }

这样总体就完成了。但细心的读者会发现,

 float totalTime = WaypointManager.GetPathLength(pathContainer.GetPathPoints()) / speed;//获取运动的总时间

这行代码是求物体运动的总时间的,这就要求该物体是匀速率运动的;倘若是变速运动,则需要自己给出相应时间应到具体位置的算法了,这里就不再赘述。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值