关于对SWS插件的一些扩展

来源:互联网 发布:java行业 编辑:程序博客网 时间:2024/06/05 18:10

最近用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;//获取运动的总时间

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