【流程图】
【流程图说明】
- 计算Time.deltaTime,其表示从上一帧开始到这一帧开始所用的时间,也即相邻两帧的时间间隔,单位为秒。其受Time.timeScale影响,默认值时1.0,可以通过修改其值来实现运动加速和减慢,设置为0可实现游戏暂停。
- 判断Time.deltaTime是否大于Time.maximumDeltaTime,其表示两帧间所允许的最大时间间隔。如果上一帧用时过长超过了这个值,那么帧间隔将被设置为这个值。这意味着上一帧可能并没有全部执行完,但下一帧就要开始执行了。而上一帧用时过长的原因最可能是物理帧更新用时长,maximumDeltaTime可以限制物理帧执行次数, maximumDeltaTime / fixedDeltaTime表示一个逻辑帧内物理帧的最大执行次数。该值一般设置为 1/10 秒到 1/3 秒之间。
- Time.time是通过Time.deltaTime累加得到的,其表示自游戏开始后所经历的时间,也表示当前帧在游戏开始后哪个时间开始执行的。Time.deltaTime是在Update中有效的,而Awake和Start在Update前执行,所以Time.time不包括游戏中所有Awake和Start执行的时间。
- 如果想知道自游戏开始后的真实物理时间,通过Time.realtimeSinceStartup获取,它不是一个常量,在同一帧内不同地方调用获取到的值是不一样的(deltaTime和time是一样的)。在大多数情况下,time可以代替realtimeSinceStartup。真实物理时间不受timeScale和编辑器暂停 影响,这个真实的物理时间从系统计时器获取,系统计时器受平台和硬件影响,有很小的可能出现这种情况:运行了多帧,但物理时间相同。
- 通过Time.frameCount可以获取当前帧是游戏开始以来的第几个帧,从0开始计数。
- Time.fixedTime类同Time.time,表示物理帧的间隔时间,用于FixedUpdate。Time.fixedDeltaTime是固定值,可以在Edit->ProjectSetting->time —>Fixedtimestep中设置。
- timeScale影响deltatime,继而影响time,继而影响FixedUpdate的调用次数。而fixedDeltaTime是不受timeScale影响的,若改变了timeScale并想使得FixedUpdate调用次数不变,那么fixedDeltaTime就需要乘以timeScale。如果timeScale设置为0,则time不会增加,那么FixedUpdate就不会被调用。
- time的增量即deltaTime和fixedDeltaTime会影响FixUpate的调用次数,每帧的deltaTime不确定,所以每帧FixedUpate的调用次数也不确定。
- 执行Update,其在FixedUpate后执行。
【参考】
https://docs.unity.cn/2019.4/Documentation/ScriptReference/Time.html