Unity里的Time

Time and frame rate management

Time类: Time script reference page.

一些常见的属性有:

  • Time.time 返回从游戏开始经历的时间.
  • Time.deltaTime 返回从上帧结束到现在经历的时间,和帧率成反比
  • Time.timeScale 控制时间流逝的因子
  • Time.fixedDeltaTime 控制fixed update 更新的间隔时间
  • Time.maximumDeltaTime 控制最大的deltatime,如果超过这个时间,也会执行一次update

Variable and Fixed time steps

Unity有两个系统分别跟踪 可变的时间间隔 和 不可变的时间间隔

可变的就是update,和帧率有关,不可变的和帧率无关

Variable frame rate management

下边的代码,是每帧移动一个距离,它就会收到帧率的影响,从而每个手机上表现不一致

//C# script example
using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    public float distancePerFrame;
    
    void Update() {
        transform.Translate(0, 0, distancePerFrame); // this is incorrect
    }
}

通过和 Time.deltaTime 属性相乘,这样就是每秒执行多长时间,因为帧率再怎么变化,总的时间是不变的:

Fixed Timestep

不像main frame update, Unity’s physics system根据fixed timestep更新, 在每帧的开始,unity会尽可能的多次执行 fixed updates 来赶上当前的时间

fixedDeltaTime 控制的是1秒内执行的步骤数,比如 0.01 表示每个固定的时间步长是持续时间的百分之一秒, 所以每秒有100个固定的时间步长

Unity’s Time Logic

下面的逻辑很重要:

Controlling and handling variations in time

如上所述,每帧之间的时间间隔可能会有所变化。

The properties explained in this section are:

  • Time.time
  • Time.unscaledTime
  • Time.deltaTime
  • Time.unscaledDeltaTime
  • Time.smoothDeltaTime
  • Time.timeScale
  • Time.maximumDeltaTime

Time.time 表示玩家开始游戏后经过的时间,所以通常是连续稳定地上升.

Time.deltaTime 表示自上一帧以来经过的时间量,因此理想情况下保持相当恒定

Time.timeScale 为0会暂停游戏,Update 方法依然执行,不过 Time.time 不会增加了,且Time.deltaTime 为0.

Time.unscaledTime、Time.unscaledDeltaTime不收缩放因子的影响,这对UI动画有用 

The table below shows an example of 16 frames elapsing one after another, with one large delay occuring half-way through, on a single frame. These figures illustrate how the various Time class properties report and respond to this large variation in frame rate.

FrameunscaledTimetimeunscaledDeltaTimedeltaTimesmoothDeltaTime
10.0000.0000.0180.0180.018
20.0180.0180.0180.0180.018
30.0360.0360.0180.0180.018
40.0540.0540.0180.0180.018
50.0710.0710.0170.0170.018
60.0890.0890.0180.0180.018
70.1070.1070.0180.0180.018
8 (a)1.123 (b)0.440 (c)1.016 (d)0.333 (e)0.081 (f)
91.1400.4570.0170.0170.066
101.1570.4740.0170.0170.056
111.1750.4920.0180.0180.049
121.1930.5100.0180.0180.042
131.2110.5280.0180.0180.038
141.2290.5460.0180.0180.034
151.2470.5640.0180.0180.031
161.2650.5820.0180.0180.028

如果不存在任何限制,那么由deltaTime缩放的物体就能够在帧速率高峰期间穿过游戏中的墙壁,因为从理论上讲,物体从一帧移动到下一帧的距离是没有限制的,所以它可以在一帧内从障碍物的一边跳到另一边而不会与之相交。因为还没有到on collider ***的检测

可以在上面的第8帧中看到,unscaledDeltaTime (d)和deltaTime (e)经过时间不同。尽管在第7帧和第8帧之间经过了整整一秒的实际时间,但deltaTime报告的时间仅为0.333秒。这是因为deltaTime被限制为maximumDeltaTime值。

类似地,unscaledTime (b)增加了大约整整一秒,因为添加了真实的(未缩放)值,而time (c)只增加了较小的偏移值。时间值没有赶上实际的时间,而是表现得好像延迟的持续时间只有maximumDeltaTime。

Time.smoothDeltaTime 属性表示最近deltaTime值的近似值,并根据算法平滑所有变化。 这是另一种技术,可以避免不必要的大步幅或移动波动或其他基于时间的计算。 In particular, those which fall below the threshold set by maximumDeltaTime. 平滑算法不能预测未来的变化,但它逐渐调整其值来平滑最近经过的增量时间值的变化,从而使平均报告时间保持与实际经过的时间量大致相等。

Time variation and the physics system

maximumDeltaTime也会影响 physics system.就像之前图片中提到的,如果它特别大的话,可能每帧之间需要执行的fixed update 比较多,会带来额外的压力

如果一个帧更新花费的时间超过了maximumDeltaTime,物理引擎
不会尝试模拟超过maximumDeltaTime的任何时间,而是让帧处理赶上。一旦帧更新完成,物理就会恢复,就好像它停止后没有时间过去一样。这样做的结果是,物理对象不会像通常那样完美地实时移动,而是会稍微放慢速度。然而,物理“时钟”仍然会跟踪它们,就好像它们在正常移动一样。物理时间的变慢通常是不明显的,通常是可以接受的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web前端框架设计第八课-表单控件绑定

web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 5.数据级联(二级级联) 6.v-model中的修饰符 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c…

全局异常处理实现

全局异常统一处理 ​ 全局异常处理类通常用于捕获和处理应用程序中发生的所有异常,从而避免在代码的多个地方重复编写异常处理逻辑。 一、全局异常处理方案 ​ 全局异常处理类有多种实现方式,每种方式都有其特定的应用场景和优势。以下是几种常见的全…

如何解决代码循环依赖问题?

今天跟大家一起探讨在日常开发过程中经常会碰到的一个问题,这个问题跟代码的维护工作有很大关系。我们知道任何系统在开发了一段时间之后,随着业务功能和代码数量的不断增加,代码之间的调用和被调用场景也会逐渐变的越来越复杂。各个类或组件…

有趣的css - 卡片翻转效果

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是利用 css3 属性 backface-visibility 让卡片翻转的过渡动画效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整…

ICode国际青少年编程竞赛- Python-5级训练场-函数练习2

ICode国际青少年编程竞赛- Python-5级训练场-函数练习2 1、 def get_item(a):Spaceship.step(1)Dev.step(a)Dev.turnLeft()Dev.step(1)Spaceship.step(1)Dev.turnRight()Dev.step(-a)Spaceship.step(1) get_item(3) get_item(2) get_item(3) get_item(1) get_item(5)2、 de…

PDF批量编辑:PDF转HTML批量操作技巧,提升文档格式转换效率

在数字化办公日益普及的今天,PDF(Portable Document Format)作为一种跨平台的文件格式,广泛应用于各种文档的存储和传输。然而,PDF文件的不可编辑性使得在某些情况下,我们需要将其转换为HTML格式以便更好地…

性价比王者HUSB237,极简PD Sink的“瘦身秘籍”

在小型化、高集成的要求下,慧能泰取电芯片进行技术升级后“瘦身成功”,推出最新一代极具性价比的最简PD Sink取电芯片——HUSB237。 图1:HUSB237 demo及封装图 HUSB237 是一款极具性价比的最简PD Sink取电芯片,支持PD3.1协议包含…

无人售货奶柜:掘金新零售蓝海,

无人售货奶柜:掘金新零售蓝海, 在日新月异的商业浪潮中,无人奶柜犹如一股清新的创业飓风,正以不可阻挡之势吸引着众多创业者的目光。这股新兴力量以其独到之处和庞大的市场蓝海,预示着一场关于健康、便捷消费方式的深…

网络故障快速定位的秘诀 - 基于 AnaTraf 全流量回溯分析

网络故障是每个 IT 从业者都深有体会的头疼问题。当网络出现异常时,如何快速定位故障原因,恢复网络正常运行,是考验运维能力的关键所在。借助 AnaTraf 网络流量分析仪的全流量回溯分析功能,您可以轻松应对各种复杂的网络问题,实现快速故障定位。 1. 网络故障分析的痛点 网络故…

【跟着例子学MySQL】生成统计报告 --分组聚合

文章目录 前言生成报告DISTINCT 关键字GROUP BY 子句GROUP BY 聚合函数HAVING 子句WITH ROLLUP 子句未完待续 前言 举例子,是最简单有效的学习方法。本系列文章以一个贯穿始终的场景,结合多个实例讲解MySQL的基本用法。 ❔ 为什么要写这个系列&#xff…

前端铺子后台管理系统:基于Vue3与Ant Design Vue的轻量级解决方案

一、引言 随着前端技术的飞速发展,构建高效、轻量且易于维护的后台管理系统成为了企业信息化建设的重要一环。前端铺子后台管理系统,作为一款基于Vue的前端框架,结合Ant Design Vue的UI组件库,为企业提供了一个高效、灵活的后台管…

铁路机辆作业移动智能终端的特点是什么?

在铁路机辆作业的现代化进程中,移动智能终端以其独特的优势成为了不可或缺的装备。这些终端以其高度的便携性,使得工作人员能够随时随地处理各种作业任务,极大地提升了工作效率。它们具备出色的抗干扰性和高防护性,能够在复杂多变…

Docker部署MaxKB详细步骤(window系统)

上面章节已经实现了ollama李现部署llama3,并实现了一些简单的问答,但是问答的界面是在命令提示符中,交互很不友好,也不方便局域网其他用户访问,所以这节用docker部署MaxKB实现网页访问llama3,首先电脑上需要…

26版SPSS操作教程(高级教程第二十二章)

目录 前言 粉丝及官方意见说明 第二十二章一些学习笔记 第二十二章一些操作方法 联合分析 假设数据 具体操作 结果解释 联合分析的数据建模 CONJOINT过程语法 汽车偏好研究 具体操作 结果解释 高精统计图 市场占有率模拟 结果解释 结束语 前言 #一路向光而…

STL—string类(1)

一、string类 1、为什么要学习string? C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(面向对象…

【Fastadmin】自定义404页面

1.修改config.php // 文件路径:application/config.php// 自定义错误码模板http_exception_template > [// 定义404错误的模板渲染404 > APP_PATH . common/view/404/404.html,], 2.需要把debug关闭才能生效 在.env文件中把debug true,改为…

阿里云OSS如果指定某个文件夹给子账户

** 第一步创建子账号 ** 创建完用户不要给任何权限! 当前页面切换到认证管理获取AccessKey即可 第二步目录授权 找到对应桶文件目录 上面授权按钮操作 选择添加的子账号账号保存即可!

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转 1. 源由2. 视频效果2.1 整体刷新率不高2.2 网络延迟可接受2.3 带宽增加丢包明显2.4 实测效果流畅 3. 总结 1. 源由 上一次,由于ZeroTier使用了国外服务器,延迟~ 569 ms,花屏、卡顿。 本着…

[自动化]pyautogui的使用

目录 环境 包的版本 前置知识 鼠标控制函数 屏幕与鼠标位置 size() position() OnScreen() 鼠标移动 moveTo() move() 鼠标拖动 dragTo() drag() mouseDown()按下鼠标 mouseUp()松开鼠标 鼠标滚动 scroll() 键盘控制函数 write() press() keyDown()和keyU…

数据分析(二)——导入外部数据,导入Excel数据,CSV文件,txt文件,HTML网页,数据抽取,DataFrame对象的loc属性与iloc属性

一.导入外部数据 1.导入.xIs或.xIsx文件 pd.read_ excel(io,sheet_ name,header) 1.1常用参数说明 ●io:表示.xIs或.xIsx文件路径或类文件对象 ●sheet name:表示工作表,取值如下表所示 ●header:默认值为0,取第一行的值为列名,数据为除列…