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.pswp.cn/news/41204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41204.shtml
英文地址,請注明出處:http://en.pswp.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…