一.、Do函数只需要执行一次:
实际上,Do函数不需要放在Update中每帧执行,只需要执行一次就行,比如:
void Start()
{
transform.DOLocalMove(new Vector3(0, 0, -5), 5f);
}
如果在Update中一直执行DOLocalMove,你可能会看到下面这个自动扩容提示,同时你会看到帧数也在不断下降:
这是因为每执行一次DOLocalMove操作,都会创建一个新的进程,导致重复堆积
总结:Do操作只需要执行一次!!!
但是Lerp相反,Lerp需要放在Update中每帧执行,比如:
void Update()
{
transform.position = Vector3.Lerp(transform.position, new Vector3(0, 0, -5), 0.2f);
}
二者效果差不多
这也是我之前搞混的地方,以为DOLocalMove也要放在Update中一直执行。。。。。。
二、时间参数和实际执行时间不一致,还是以上面的物体移动为例:
实际耗费时间通过下面这些函数计算:
float StartTime,EndTime;
bool once,First;
void Start()
{
StartTime = 0f;
EndTime = 0f;
once = true;
First = true;
}
void Update()
{
if (First)
{
transform.DOLocalMove(new Vector3(0, 0, -5), 5f);
StartTime = Time.time;
First = false;
}
if (transform.position.z == -5&&once)
{
transform.DOKill();
EndTime = Time.time;
var cost = EndTime - StartTime;
Debug.Log("所耗时间为:"+cost+"s");
once = false;
}
}
结果如下:
实际效果:可以看到,从(0,0,0)移动到(0,0,-5)总共花了5秒左右,符合预期
实际执行时间: 一直执行,远远大于5秒,理论上是无限长时间,永远不会自动停止
解决方法,仍以上面为例:
1.通过DoKill结束DO进程,如:
if (transform.position.z == -5)
{
transform.DOKill();
}
2.定义Tween变量t,用 t = DOTween.To()进行过渡操作,并用 t.kill()结束DO进程;
3.若要实现匀速+固定时间(近似),可以参考我的文章:
Unity Lerp实现近似匀速过渡固定步长,而非由快到慢的当前比值_psp之魂的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-474381.html
三、使用DoFade等操作时,确保游戏速度Time.timeScale不为0。比如我个人遇到的一个问题:当我打开UI菜单时设置了Time.timeScale=0,因此之后所有的DoFade操作(比如用Do对UI图标进行大小变化、颜色变化)都无效,直到恢复游戏速度。文章来源地址https://www.toymoban.com/news/detail-474381.html
到了这里,关于Unity DoTween DoFade等Do函数需要注意的问题(已修改)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!