赞
踩
最近在开发游戏中遇到一些因为游戏暂停(Time.deltaTime = 0)导致的问题。主要是没有能够及时意识到游戏暂停会带来后续的变化,踩了一些坑,在此做一些记录。
我主要遇到以下3个问题:
问题的关键是,原先依赖Time.deltaTime的程序,在Time.deltaTime变为0后,类似于“等待”这样的功能,都不会正常工作了,因为时间流速变成了0。
都需要替换成依赖Time.unscaledDeltaTime的系统。
将Coroutine中的WaitForSeconds替换为WaitForSecondsRealTime。
private IEnumerator ExampleCoroutine()
{
Time.deltaTime = 0.0f;
Debug.Log("做点什么");
yield return new WaitForSeconds(2.0f); // 游戏时间流速为0了,会一直卡在这
Debug.Log("这条代码不会执行");
}
private IEnumerator ExampleCoroutine()
{
Time.deltaTime = 0.0f;
Debug.Log("做点什么");
yield return new WaitForSecondsRealTime(2.0f); // unscaledTime
Debug.Log("过2秒后执行这条代码");
}
可以用Coroutine和WaitForSecondsRealTime来配合实现类似于Invoke的功能。
需要在链式调用中添加.SetUpdate(true),将isIndependentUpdate参数设置为true
tmp.DOFade(1.0f, 1f).SetUpdate(true);
当开发的需求涉及到Time.deltaTime变化时,要有意识地去考虑有哪些代码是依赖游戏时间流速的,并做出对应调整来避免Bug。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。