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的任何时间,而是让帧处理赶上。一旦帧更新完成,物理就会恢复,就好像它停止后没有时间过去一样。这样做的结果是,物理对象不会像通常那样完美地实时移动,而是会稍微放慢速度。然而,物理“时钟”仍然会跟踪它们,就好像它们在正常移动一样。物理时间的变慢通常是不明显的,通常是可以接受的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习-通用定时器

简介 框图介绍 时钟选择 计数器部分 输入捕获和输出比较框图 嵌入式学习全文参考(小向是个der)做笔记:https://blog.csdn.net/qq_41954556/article/details/129735708

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行,因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

Python以docker形式部署,flask简易服务器。

公司大部分都是springboot 服务器,有时候用到python写的一些模型,部署在linux上进行处理 首先项目这样: flask就不说了,快捷服务器, # -*- coding: utf-8 -*-from flask import Flask, request# 实例化Flask对象 app…

LVM - Linux磁盘逻辑卷管理器概念讲解及实践

1、lvm概念 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(Logi…

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做:SuperHotSwap(超级热更新) 开发初心:旨在做出一款最便捷的IDEA热更新插件,减少用户操作步骤,提供零配置的可视化操作更新。 为什么要写这个插件: 每次改一下Mappe…

OSPF工作过程

1.OSPF的数据包 hello包——周期性的发现,建立以及保活邻居关系 hello时间 --- 10S 死亡时间 --- 4倍的hello时间 --- 40S RID --- 1,全网唯一;2,格式统一---- 格式要求和IP地址一样,由32位二进制构成,使用点分十进制…

[js] 递归,数组对象根据某个值进行升序或者降序

一、效果图 1.1 父级 1.2 父级与子级 二、代码 升序降序&#xff0c;只要把 a.num - b.num 改成 b.num - a.num <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, i…

idea 使用 git

可以看见项目地址&#xff0c; git clone 地址 就可以拉新项目了 命令 git remote -v

JETBRAINS IDES 分享一个2099通用试用码,支持一键升级!CLion 2024 版

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

8.基于鱼鹰优化算法(OOA)优化VMD参数(OOA-VMD)

代码原理 鱼鹰优化算法&#xff08;Osprey Optimization Algorithm, OOA&#xff09;是一种基于仿生学原理的启发式优化算法&#xff0c;它模拟了鱼鹰觅食的行为&#xff0c;通过调整搜索空间中的个体位置来优化目标函数。 鱼鹰优化算法可参考&#xff1a;鱼鹰优化算法(Ospre…

Spring Framework-IoC详解

IoC的概念和作用 在介绍Ioc之前&#xff0c;我们首先先了解一下以下内容 什么是程序的耦合 耦合性(Coupling)&#xff0c;也叫耦合度&#xff0c;是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度…

ssti学习(1)

一、成因&#xff1a; 渲染模板时&#xff0c;没有严格控制对用户的输入。&#xff08;使用了危险的模板&#xff0c;导致用户可以和flask程序进行交互&#xff09; flask是一种基于web开发的web服务器&#xff0c;如果用户可以和flask交互&#xff0c;则可以执行eval、syste…

03 Linux编程-进程

1、进程的相关概念 1.1 程序与进程 程序是静态的概念&#xff0c;进程是程序的一次运行活动。 1.2 查看系统中有哪些进程 ps #只显示一小部分进程 ps -aux #会打印当前所有进程 ps -aux|grep init #使用grep筛选出只含有init的进程top #运行显示的进程有点类似windows…

视频号小店应该怎么去做呢?运营步骤分享!建议收藏!

大家好&#xff0c;我是电商小V 视频号小店是一个新推出的项目&#xff0c;目前可以说正处于红利期&#xff0c;也是正处于野蛮生长的阶段&#xff0c;平台现在对视频号的扶持可以说是非常大的&#xff0c;对于新入驻的商家也是非常友好的&#xff0c;所以说现在入驻是最好的时…

ASP.NET邮件收发程序的设计与开发

摘 要 《邮件收发程序的设计与开发》是一个综合性的程序设计&#xff0c;涉及到界面、系统、数据库、协议、编码等多个方面的内容。本设计前台采用.NET技术,后台数据库采用SQL Server 2000&#xff0c;语言采用C#&#xff0c;主要讲述了邮件系统的注册、登陆、管理、发送和…

定时器的理论和使用

文章目录 一、定时器理论1.1定时器创建和使用 二、定时器实践2.1周期触发定时器2.2按键消抖 一、定时器理论 定时器是一种允许在特定时间间隔后或在将来的某个时间点调用回调函数的机制。对于需要周期性任务或延迟执行任务的嵌入式应用程序特别有用。 软件定时器&#xff1a; …

SpringBoot多模块项目MybatisPlus配置

项目目录 主模块配置 配置类 Configuration EnableTransactionManagement MapperScan("com.sms.**.mapper") public class MybatisPlugConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor new…

回复完成 输入框还显示值的问题

回复完成 输入框还显示值的问题 解决代码 先把id 值清空 再构建下这个输入框 $("#details_article_reply_content").val(""); // 清空textareavar editor editormd("article_details_reply", {width: "100%",height: "100%"…

网上有哪些赚钱的方法能一天赚二三十?盘点7个靠谱的搞钱副业和赚钱软件

想在家里躺着就能把钱赚&#xff1f;这不再是遥不可及的梦想&#xff01;随着互联网的飞速发展&#xff0c;网上赚钱的方式层出不穷&#xff0c;总有一款适合你。 今天&#xff0c;就让我们一起揭开这些神秘面纱&#xff0c;看看哪些网上赚钱秘诀能让你轻松实现月入过万&#x…

C# OpenCvSharp DNN 黑白老照片上色

C# OpenCvSharp DNN 黑白老照片上色 目录 效果 项目 代码 下载 参考 效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropS…