您的位置:首页 > 移动开发 > Unity3D

关于对SWS插件的一些扩展

2017-08-08 18:26 302 查看

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


这行代码是求物体运动的总时间的,这就要求该物体是匀速率运动的;倘若是变速运动,则需要自己给出相应时间应到具体位置的算法了,这里就不再赘述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 插件 扩展 继承