Unity的TimeScale的影响范围分析
大家好,我是阿赵。
这期来说一下Unity的TimeScale。
一、前言
Unity提供了Time这个类,来控制时间。其实我自己倒是很少使用这个Time,因为做网络同步的游戏,一般是需要同步服务器时间,所以我比较多是在使用System.DateTime获取系统时间,再定一个时间间隔和服务器同步当前时间,来维持一个客户端和服务器的时间同步。
不过Unity的Time方法也是有比较有用的时候,特别是Time.timeScale时间缩放这个属性,它可以整体的加快或者减慢甚至暂停Unity里面动画播放。
不过这个TimeScale,也是会引起一些问题的,所以在使用之前,必须对它的影响范围做一个详细了解。
二、Demo
TimeScale对Unity的所有动画组件都是起作用的,包括了Animation、Animator、粒子发射器等。接下来看看它对脚本运行的影响。
这里写一个简单的Demo,实际看看TimeScale的变化时,一些我们比较关心的方法调用有什么影响。
using UnityEngine;public class TestTimeScale : MonoBehaviour
{private float passTime = 0;private float fixedPassTime = 0;private float updateTime = 0;private float fixedUpdateTime = 0;private float lateUpdateTime = 0;private float[] timeArray = new float[] { 0, 0.1f, 1, 3 };// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){passTime += Time.deltaTime;updateTime += 1;}void FixedUpdate(){fixedPassTime += Time.fixedDeltaTime;fixedUpdateTime += 1;}private void LateUpdate(){lateUpdateTime += 1;}void OnGUI(){GUILayout.BeginHorizontal();GUILayout.Box(Time.timeScale + "");for(int i = 0;i<timeArray.Length;i++){if(OneButton(timeArray[i] + "x")){Time.timeScale = timeArray[i];}}GUILayout.EndHorizontal();GUILayout.Label("Time.time:"+Time.time);GUILayout.Label("passTime:" + passTime);GUILayout.Label("fixedPassTime:" + passTime);GUILayout.Label("updateTime:" + updateTime);GUILayout.Label("fixedUpdateTime:" + fixedUpdateTime);GUILayout.Label("lateUpdateTime:" + lateUpdateTime);GUILayout.Label("Time.deltaTime:" + Time.deltaTime);GUILayout.Label("Time.fixedDeltaTime:" + Time.fixedDeltaTime);GUILayout.Label("Time.fixedTime:" + Time.fixedTime);GUILayout.Label("Time.fixedUnscaledDeltaTime:" + Time.fixedUnscaledDeltaTime);GUILayout.Label("Time.realtimeSinceStartup:" + Time.realtimeSinceStartup);}private bool OneButton(string content){return GUILayout.Button(content, GUILayout.Width(100), GUILayout.Height(40));}
}

运行demo,会看到上面有几个调整TimeScale的按钮,分别把TimeScale设置成0、 0.1 、1 、3。然后下面有一些当前数值的变化显示。
三、分析
1、Update类
1.Update
通过观察demo里面的updateTime 可以发现,Update方法的调用频率,是不会受到TimeScale的变化的影响的。
2.FixedUpdate
通过观察demo里面的fixedUpdateTime 可以发现,FixedUpdate方法是受到TimeScale影响的,当TimeScale变成0的时候,值就不会增长了,当TimeScale值变大那时,调用的频率也会变快。
3.LateUpdate
通过观察demo里面的lateUpdateTime 可以发现,LateUpdate方法调用不受TimeScale的影响。
2、时间运行类
1.Time.time
这个时间是从开始游戏到当前帧开始的时间,从demo运行可以看出,这个时间是会受到TimeScale的影响的,当TimeScale变成0的时候,它就不会增长了。
2.Time.fixedTime
这个时间是从游戏开始运行到最后一次FixedUpdate方法调用的时间,从上面可以指定,FixedUpdate是受到TimeScale的影响的,所以,Time.fixedTime同样也会受到TimeScale的影响。
3.Time.realtimeSinceStartup
这个时间是从游戏开始运行到当前的实际时间。从demo可以看出,这个时间是不会受到TimeScale的影响的。所以如果想做一个不受TimeScale影响的计时器,可以使用这个。不过我还是更习惯于使用系统时间。
3、时间间隔类
1.Time.deltaTime
这个时间是从上一帧到当前帧所过的时间。我们经常会使用speedTime.deltaTime来做一些准确限制速度的程序动画。
从demo可以看出,Time.deltaTime是会受到TimeScale的影响的,TimeScale的值越大,Time.deltaTime的值也就越大。所以通过在UpDate方法里面计算speedTime.deltaTime来做动画时,当调大了TimeScale的值,那么动画的速度也会变快。
2.Time.fixedDeltaTime
从demo可以看出,Time.fixedDeltaTime是不会受到TimeScale的影响的,它默认是0.02,然后我们调节TimeScale的值,Time.fixedDeltaTime是不会变化的。
值得注意的是,上面列举的所有参数,都是只读的,但是Time.fixedDeltaTime却是可读写的。这个是非常有意义的事情来的。如果我们使用speedTime.deltaTime来做动画,动画会跟随这TimeScale变快,但如果我们有一部分动画的速度不想跟随着TimeScale变化,那么就可以用speedTime.fixedDeltaTime来计算。而且我们还可以自己调节fixedDeltaTime的值,来单独控制这部分动画的快慢。
相关文章:
Unity的TimeScale的影响范围分析
大家好,我是阿赵。 这期来说一下Unity的TimeScale。 一、前言 Unity提供了Time这个类,来控制时间。其实我自己倒是很少使用这个Time,因为做网络同步的游戏,一般是需要同步服务器时间,所以我比较多是在使用System.Date…...
爬虫逆向实战(五)--猿人学第三题
一、数据接口分析 主页地址:猿人学第三题 1、抓包 通过抓包可以发现数据接口是api/match/3 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 无cookie是否加密? 无 二、发送请求 …...
[虚幻引擎] UE使用虚拟纹理在模型上显示挖空效果
此教程是记录如在UE中使用虚拟纹理,实现模型挖洞的效果。 1. 新建项目,开启项目支持虚拟纹理并并重启。 2. 新建一个基础关卡 3. 拖动“运行时虚拟纹理体积” 进入场景,并把体积修改变大,以可以完全包括到地板。 4. 创建一个虚拟纹…...
vue3中reactive和ref的比较
1.reactive和ref函数的共同作用是什么? 用函数调用的方式生成响应式数据 2. reactive vs ref? 1.reactive不能处理简单类型的数据 2.ref参数类型支持更好但是必须通过.value访问修改 3.ref函数的内部实现依赖于reactive函数 3. 在实际工作中推荐使用哪个? …...
Beats:使用 Filebeat 将 golang 应用程序记录到 Elasticsearch - 8.x
毫无疑问,日志记录是任何应用程序最重要的方面之一。 当事情出错时(而且确实会出错),我们需要知道发生了什么。 为了实现这一目标,我们可以设置 Filebeat 从我们的 golang 应用程序收集日志,然后将它们发送…...
【STM32+ESP8266上云连载①】给ESP8266烧录AT固件
文章目录 一、给NodeMCU烧录固件1.1硬件准备1.2软件准备1.3AT固件下载1.4配置设置1.5开始烧录 二、给ESP8266-01S烧录固件2.1硬件准备2.2AT固件下载2.3连线2.4烧录配置 三、给ESP-12E/F/S单片烧录固件四、指令测试4.1HTTP测试4.2MQTT测试 我在使用ESP8266的时候遇到了一些问题&…...
深入解析Spring基本概念和核心思想
文章目录 基本概念IoCIoc容器IoC理解IoC的步骤Spring中使用ioc的步骤 AopAop的理解Aop的步骤 控制反转谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转? 依赖什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?…...
Redis数据结构——快速列表quicklist、快表
定义 Redis中的数据结构,链表和压缩列表这两种数据结构是列表对象的底层实现方式。 当时考虑到链表的附加空间太大,节点的内存都是单独分配的,还会导致内存碎片化问题严重。 因此从Redis3.2开始,对列表的底层数据结构进行了改造&…...
excel统计函数篇3之rank系列
下面这三个函数都是返回指定数据在指定范围中的数据中的名次 1、RANK(number,ref,[order]):返回一列数字的数字排位(数字排位是相对于列表中其他值的大小) rank(数字,数字序列,升序/降序) – 数字在数字序列中的名次 2、RANK.AV…...
Flink 火焰图
方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能,并且可以细化到 subtask 粒度。 第一步:配置启用功能 Flink 作业动态参数里增加配置:“rest.flamegraph.enabled”: “true” 并重启作业。当前…...
kubectl get 中英文对照
wlzx059node01:~$ kubectl get --help Display one or many resources. (显示一个或多个资源。)Prints a table of the most important information about the specified resources. You can filter the list using a label selector and the --selector flag. If the desired …...
R语言APSIM模型进阶应用与参数优化、批量模拟实践技术
随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…...
无涯教程-Perl - times函数
描述 此函数返回一个四元素列表,为当前进程及其子进程提供用户,系统,子进程和子系统时间。 语法 以下是此函数的简单语法- times返回值 此函数返回ARRAY,($usertime,$systemtime,$childsystem,$childuser) 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w($use…...
《计算机网络:自顶向下方法》第五章--网络层:控制平面
控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理 传统上,控制平面功能与数据平面的转发功能在一起实现,在路由器中作为统一的整体…...
Mysql存储引擎中InnoDB与Myisam的主要区别
在mysql命令窗口中,输入show engins,可以看到mysql的所有引擎,那么这么多的引擎,我们经常使用到的也就两种,MyISAM和InnoDB,这两种引擎究竟有什么区别呢? 1, 事务处理 innodb 支持事务功能,myisam 不支持。 Myisam 的执行速度更快,性能更好。 2,select ,update ,inse…...
数据仓库 ODS->DWD->DWS->ADS
1.数据仓库DW 1.1简介 Data warehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它是一整套包括了etl、调度、建模在内的完整的理论体系。数据仓库…...
【SpringBoot】SpringBoot获取不到用户真实IP怎么办
文章目录 前言问题原因解决方案修改Nginx配置文件SpringBoot代码实现 前言 项目部署后发现服务端无法获取到客户端真实的IP地址,这是怎么回事呢?给我都整懵逼了,经过短暂的思考,我发现了问题的真凶,那就是我们使用了N…...
LightDB 23.3 plorasql 函数支持inout参数输出
开篇立意 oracle PLSQL函数中返回值有两种情况: (1)使用return返回值; (2)使用out修饰的参数(oracle不支持inout) SQL> create function yu(id inout int) return int asbeginn…...
SpringBoot第41讲:SpringBoot集成Redis - 基于RedisTemplate+Jedis的数据操作
SpringBoot第41讲:SpringBoot集成Redis - 基于RedisTemplate+Jedis的数据操作 Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文是SpringBoot第41讲,主要介绍基于RedisTemplate + Jedis方式对Redis进行查询和操作的案…...
用 React+ts 实现无缝滚动的走马灯
一、走马灯的作用 走马灯是一种常见的网页交互组件,可以展示多张图片或者内容,通过自动播放或者手动切换的方式,让用户能够方便地浏览多张图片或者内容。 本次实现的不是轮播图而是像传送带一样的无限滚动的形式。 二、需求梳理 走马灯可设…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
