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方法里面计算speed
Time.deltaTime来做动画时,当调大了TimeScale的值,那么动画的速度也会变快。

2.Time.fixedDeltaTime

  从demo可以看出,Time.fixedDeltaTime是不会受到TimeScale的影响的,它默认是0.02,然后我们调节TimeScale的值,Time.fixedDeltaTime是不会变化的。
  值得注意的是,上面列举的所有参数,都是只读的,但是Time.fixedDeltaTime却是可读写的。这个是非常有意义的事情来的。如果我们使用speedTime.deltaTime来做动画,动画会跟随这TimeScale变快,但如果我们有一部分动画的速度不想跟随着TimeScale变化,那么就可以用speedTime.fixedDeltaTime来计算。而且我们还可以自己调节fixedDeltaTime的值,来单独控制这部分动画的快慢。

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

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

相关文章

linux驱动 - 20230817

练习: 通过字符设备驱动分步注册方式编写LED灯的驱动&#xff0c;应用程序使用ioctl函数编写硬件控制逻辑 头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned…

问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨

机器人概念17日盘中走势活跃&#xff0c;到发稿&#xff0c;拓斯达大涨18%&#xff0c;昊志机电涨近16%&#xff0c;丰立智能涨超13%&#xff0c;步科股份、优德精细涨超10%&#xff0c;新时达涨停&#xff0c;天玑科技、兆龙互联、中大力德涨逾9%。 消息面上&#xff0c;8月16…

HTTP 介绍

HTTP 介绍 HTTP 协议一般指 HTTP&#xff08;超文本传输协议&#xff09;。超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff0c;是因特网…

Java 计算两个字符的相似度

在Java中&#xff0c;要计算两个字符的相似度&#xff0c;可以借助一些字符串相似度算法。以下是几种常见的字符串相似度算法&#xff1a; Levenshtein距离&#xff1a;也称为编辑距离&#xff0c;用于计算两个字符串之间的最小编辑操作次数&#xff08;插入、删除、替换&…

解决ios隔空播放音频到macos没有声音的问题

解决ios隔空播放音频到macos没有声音的问题 一、检查隔空播放支持设备和系统要求二、打开隔空播放接收器三、重置MAC控制中心进程END 一、检查隔空播放支持设备和系统要求 Mac、iPhone、iPad 和 Apple Watch 上“连续互通”的系统要求 二、打开隔空播放接收器 ps;我设备是同一…

java 并发 简单使用

文章目录 概要代码 概要 java 并发 简单使用 代码 public static final ExecutorService EXECUTOR_GENERAL new ThreadPoolExecutor(100, 1000,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(10000));int size 1000;List<UserService> userServices …

element+vue 表格行拖拽功能

解决方案 使用 sortable.js 步骤一&#xff1a; 安装 npm install vuedraggable步骤二&#xff1a;引入 import Sortable from sortablejs;步骤三&#xff1a; el-table 添加row-key属性&#xff0c;外层包一层 sortableDiv <div class"sortableDiv"> 拖…

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测&#xff0c;运行环境Matlab2023b及以上…

Django图书商城系统实战开发-部署上线操作

Django图书商城系统实战开发-打包部署 技术背景掌握 当你需要在服务器上部署Web应用程序时&#xff0c;Nginx是一个强大且常用的选择。Nginx是一个高性能的Web服务器和反向代理服务器&#xff0c;它可以处理大量的并发连接&#xff0c;并提供负载均衡、缓存、SSL等功能。下面…

seata 的部署和集成

文章目录 seata的部署和集成一、部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务 二、微服务集成seata1.引入依赖2.修改配置文件 TODO三、TC服务的高可用和异地容灾1.模拟异地容灾的TC集群2.将事务组映射配置到nacos3.微服务读取nacos…

中期国际:MT4数据挖掘与分析方法:以数据为导向,制定有效的交易策略

在金融市场中&#xff0c;制定有效的交易策略是成功交易的关键。而要制定一份可靠的交易策略&#xff0c;数据挖掘与分析方法是不可或缺的工具。本文将介绍如何以数据为导向&#xff0c;利用MT4进行数据挖掘与分析&#xff0c;从而制定有效的交易策略。 首先&#xff0c;我们需…

操作系统搭建相关知识

文章目录 系统篇netstat命令systemctl命令Systemd系统资源分类&#xff08;12类&#xff09; 网络篇ifconfig命令操作系统配置动态IP脚本dhcp服务的安装与配置防火墙相关知识 操作系统常用配置文件 系统篇 netstat命令 netstat指路 systemctl命令 常用于重启系统的每个服务…

注解@DependsOn

注解 DependsOn 1. 注解由来&#xff1a; DependsOn 注解是 Spring 框架提供的一种注解&#xff0c;用于指定 Bean 之间的依赖关系。通过在 Bean 上添加 DependsOn 注解&#xff0c;可以确保在初始化时先初始化指定的依赖 Bean&#xff0c;从而满足对象之间的正确顺序。 2. 注…

没有使用springboot 单独使用spring-boot-starter-logging

如果您不使用Spring Boot框架&#xff0c;但想单独使用Spring Boot Starter Logging&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 添加Maven依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

Kotlin手写RxJava变换符

Kotlin手写RxJava变换符 本文链接&#xff0c;点击这里进入 1、核心点&#xff1a;中转站存储之前的数据 2、三行代码实现RxJava 使用create、map、observer fun main() {// create构造出RxJavaCore存放&#xff0c;lambda执行完的结果create{"WCH"}.map{ // 扩展…

AI绘画 stable diffusion Midjourney 官方GPT文档 AIGC百科全书资料收集

教学AI绘画 AIGC工具 SD教程 ###Redis面试题 单机Redis的qps大概是多少&#xff1f; 项目中用到了哪些Redis的数据类型&#xff1f;为什么这么用&#xff1f; Redis的key到了过期时间就被删除了吗&#xff1f;简述下Redis的过期策略&#xff1f; Redis有哪几种内存淘汰策略…

Jetpack Compose:探索声明式UI开发的未来

Jetpack Compose&#xff1a;探索声明式UI开发的未来 1. 引言 在移动应用开发领域&#xff0c;用户界面&#xff08;UI&#xff09;开发一直是开发过程中的关键挑战之一。传统的UI开发方式往往涉及大量繁琐的布局代码、手动管理状态和事件处理&#xff0c;不仅容易引发错误&a…

Google浏览器点击链接打开新标签页

由于新安装的谷歌浏览器点击链接时默认在当前窗口打开非常不方便&#xff0c;这里提供一下解决思路 1、打开浏览器输入任意内容&#xff0c;点击右上角的设置 2、在弹出的选项栏中点击See all Search settings 3、点击Other settings&#xff0c;将指定选项打开即可

C++模板元编程(6)模板参数替换(Template argument substitution)

文章目录 1、什么是模板参数替换2、实例3、模板参数替换规则 1、什么是模板参数替换 模板参数替换&#xff08;Template argument substitution&#xff09;&#xff1a;在函数模板实例化的过程中&#xff0c;模板参数会被替换为实际的参数类型或值。这个替换过程称为模板参数…

C#__事件event的简单使用:工具人下楼问题

// 工具人类 namespace DownStair {delegate void DownStairDelegate(); // 定义了一个下楼委托class ToolMan{public string Name { get; set; } // 声明工具人的名字属性// public DownStairDelegate downStairDelegate null; // 初始化委托downStair为空委托// 解决方案pu…