Unity 游戲優化(持續更新中...)

垃圾回收

是什么?

垃圾回收(Garbage Collection)GC

工作機制

1、Unity 為用戶生成的代碼和腳本采用了自動內存管理。

2、小塊數據(如值類型的局部變量)分配在棧上。大塊數據和長期存儲分配在托管堆上。

3、垃圾收集器 (GC)會定期識別并釋放未使用的堆內存。雖然這是自動運行的,但檢查堆中所有對象的過程可能導致游戲卡頓或運行緩慢。

要注意某些不必要的堆分配,這可能會導致?GC?尖峰 :?

1、在?C#?中,字符串是引用類型,而不是值類型。減少不必要的字符串創建或操作。如果需要在運行時構建字符串,請使用StringBuilder類。

2、緩存數組引用,不要在循環中分配數組。

3、使用 GameObject.CompareTag?而不是手動將字符串與?GameObject.tag?進行比較?(返回新字符串會產生垃圾)。?

4、雖然?yield?不會產生垃圾,但創建新的?WaitForSeconds?對象會。緩存并用?WaitForSeconds?對象,而不要在?yield?行中創建它。

using System.Collections;
using UnityEngine;public class Test : MonoBehaviour
{public WaitForSeconds logic;private void Start(){logic = new WaitForSeconds(3);}IEnumerator Check(){yield return logic;Debug.Log("打印");}
}

5、LINQ?和正則表達式 :它們幕后都會進行裝箱,從而產生垃圾。如果性能很重要,請避免使用?LINQ?和正則表達式。

6、如有可能,可以使用?System.GC.Collect?主動觸發垃圾收集。

UI優化

1、避免使用過多層級

拆分層級!在層級視圖中如果游戲對象不需要嵌套,請簡化父子化。較少的層級關系將受益于多線程刷新場景中的變換 (Transform)。復雜層級關系會發生不必要的變換 (Transform) 計算以及更多垃圾收集開銷。

2、不勾選Raycast Target

對與不需要Raycast Target的UI,建議將其禁用。這些小的更改可以減少不必要的計算。

美術資源優化

正確導入紋理

紋理會占用大部分內存,因此,導入設置非常重要。通常,請遵循以下指導原則 :

  • 減小 Max Size :使用能生成視覺上可接受的結果的最低設置。這種非破壞性方式,可以快速降低紋理內存。

  • 使用 2 的冪 (POT) :Unity 要求移動端紋理壓縮格式 (PVRCT 或 ETC)采用 POT 紋理尺寸。

  • 制作紋理圖集 :將多個紋理放置到單個紋理中,可以減少繪制調用和加快渲染速度。使用Unity 精靈圖集 或第三方 Texture Packer 可以制作紋理圖集。

  • 關閉 Read/Write Enabled 選項 :如果啟用,此選項在 CPU 和 GPU 可尋址內存中都會創建副本,紋理會占用雙倍內存。大多數情況下,應保持此選項為禁用狀態。如果要在運行時生成紋理,請通過 Texture2D.Apply 強制執行,并且傳入設置為 true 的 makeNoLongerReadable。

  • 禁用不必要的 Mip Map :對于在屏幕上大小保持不變的紋理(如 2D 精靈和 UI 圖形),Mip Map 不是必需的,對于與攝像機的距離會變化的 3D 模型,請保留 Mip Map為啟用狀態。

檢查多邊形數量

分辨率越高的模型,需要的內存使用量越大,并且可能占用更長的 GPU 時間。您的背景幾何體是否需要五十萬個多邊形?考慮減少所選 DCC 包中的模型。刪除攝像機的視角看不到的多邊形。使用紋理和法線貼圖而不是高密度網格來實現精細的細節。

優化技術或操作

LOD技術

是什么?

多層次細節(Level Of Detail )

作用

根據相機距離物體的遠近來顯示不同精度的模型

優點

減少場景中模型繪制的面數,提高渲染的性能

缺點

需要準備多套不同精度的美術資源,同時也增大了游戲體積

對象池技術

是什么?

在開始時初始化若干對象,將它們存到對象池中。需要使用的時候從對象池中取出,使用完后重新放回對象池中。

優點

可以避免頻繁創建和銷毀對象帶來性能消耗。

適用場景

如果需要對某種對象進行頻繁創建和銷毀時,例如應用在子彈、敵人等

批處理技術?

Unity的批處理(Batching)技術是優化渲染性能的重要手段,它通過減少Draw Call次數來提高渲染效率。

光照烘焙

光照烘焙是Unity中重要的光照優化技術,它通過預計算場景中的光照信息,將結果"烘焙"到光照貼圖(Lightmap)中,從而減少實時計算開銷。

遮擋剔除

(occlusion culling)

遮擋剔除是Unity中一項重要的渲染優化技術,它通過剔除被其他物體完全遮擋的物體來減少不必要的渲染計算。

限制后期處理效果

全屏幕后期效果處理(如發光)會極大降低性能。請在游戲的美術設計中謹慎使用這些效果。

避免過多使用 Animator

Animator 主要用于人形角色,但也常用于動畫化單個值(如 UI 元素的 Alpha 通道)。

避免過多使用Animator,尤其在處理UI動畫時。盡可能對移動設備使用舊版 Animation 組件。

考慮創建補間函數或者使用第三方庫來實現簡單動畫(如 DOTween)。

選擇正確的幀率

1、移動端項目必須在幀率和電池續航時間以及熱節流之間獲得平衡。不需要將設備限值推向 60 fps,可以折衷以 30 fps 運行。Unity 默認移動端為 30 fps。

2、也可以通過 Application.targetFrameRate 在運行時動態調整幀率。例如,甚至可以將緩慢或相對靜止的場景降至 30 fps 以下,而將玩游戲時的 fps 設置保留為較高值。

代碼優化

1、如果確實需要使用 Update,可以考慮每 n 幀運行一次代碼。這是一種應用時間切片 (將繁重的工作負載分布到多個幀的常用技術)的方法。在下面的示例中,我們每三幀運行一次 邏輯

private int interval = 3;void Update()
{if (Time.frameCount % interval == 0){//運行邏輯}
}

2、避免空Unity 事件

即使是空的 MonoBehaviour 也需要資源,因此應刪除空的 Update 或 LateUpdate 方法。

3、刪除調試日志語句Debug.Log

日志語句(尤其是在 Update、LateUpdate 或 FixedUpdate 中)可能會降低性能。在進行構建之前,請禁用日志語句。

4、緩存游戲對象和組件

GameObject.Find、GameObject.GetComponent 和 Camera.main( 在 2020.2之前的版本中)可能開銷較大,應避免在 Update 方法中調用它們。而應在 Start 中調用它們,并且緩存相應結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python和java差異:關鍵數據類型與容器

2.0. 對象的類型:可變 (Mutable) 與不可變 (Immutable) 在Python中,理解對象的可變性 (mutability) 是至關重要的,它影響著變量如何被修改、函數參數如何傳遞以及數據結構的行為。 不可變對象 (Immutable Objects): 大白話定義:…

DAY 33

知識點回顧: 1. PyTorch和cuda的安裝 2. 查看顯卡信息的命令行命令(cmd中使用) 3. cuda的檢查 4. 簡單神經網絡的流程 a. 數據預處理(歸一化、轉換成張量) b. 模型的定義 i. 繼承nn.Module類 ii. 定義…

Minktec 柔性彎曲傳感器,靈敏捕捉坐姿弓背、精準監測行走姿態,守護兒童背部健康,為科學健身提供數據支撐,開啟職業健康與背痛 AI 干預新方向。

Minktec彎曲形變傳感器通過創新的技術設計,為各種彎曲和形變檢測需求提供了精確的解決方案。其核心技術基于薄膜柔性傳感器的應用,能夠捕捉物體在三維空間中的動態變化。傳感器內部結合了多點排列的應變元件和專有算法,實現了形狀的實時重建。…

快遞鳥接口費用解析:中小電商成本控制方案

中小電商企業在物流環節的成本控制,直接影響著整體運營效率和利潤空間。作為國內主流的物流數據服務商,快遞鳥API接口憑借其聚合查詢、電子面單、軌跡跟蹤等功能,成為眾多電商企業的選擇。但如何精準解析其收費模式,并制定科學的成…

maven 最短路徑依賴優先

問題描述: 項目在升級大版本后出現了,兩個不同模塊所引用的同一個依賴包版本不同 module A 引用了 module B,module B 引用了 A_1.0.jar->B_1.0.jar->C_1.0.jar(C 為B 里面的包) 在執行 mvn dependency:tree 后發現: modul…

游戲引擎學習第314天:將精靈拆分成多個層

回顧并為今天的工作做準備 我們今天繼續昨天開始的工作,現在我們要回到渲染中處理 Z 值的最終環節。我們目前已經有一個我們認為還算合理的排序方式,雖然可能還需要在接下來的過程中進行一些調整,但總體上已經有了一個明確的方向。 我們已經…

HashSet的基本概念

ashSet的基本概念 - HashSet 是C#中用于存儲唯一元素的泛型集合類,它基于哈希表實現,具有快速查找、添加和刪除元素的特性。 - 核心特點: - 不允許存儲重復元素 - 元素無序排列 - 查找、添加、刪除操作的平均時間復雜度為O(1) - 實現了 IEnum…

信號與系統10-綜合案例:智能信號處理系統

第7課:綜合案例——智能信號處理系統 1. 案例1:基于傅里葉變換與AI的語音信號分類系統 1.1 理論基礎 傅里葉變換是信號處理的核心工具之一,能夠將時域信號轉換為頻域表示(如頻譜圖)。語音信號的頻域特征&#xff08…

詳解Kubernetes Scheduler 的調度策略

詳解Kubernetes Scheduler 的調度策略 在 Kubernetes(K8s)中,Scheduler(調度器) 負責 決定 Pod 應該運行在哪個 Node(節點)。 ?? 調度器的目標是什么? ? 最大化資源利用率(讓 CPU、內存等資源不浪費) ? 保證 Pod 運行在合適的 Node 上(避免超載、滿足親和性)…

在 ElementUI 中實現 Table 單元格合并

在 ElementUI 中實現 Table 單元格合并 在使用 ElementUI 的 Table 組件時,有時我們需要合并相鄰的單元格,以提高表格的可讀性和簡潔性。下面是一個關于如何在 Table 中根據特定字段合并單元格的實現方法。 邏輯分析 spanMethod 方法:這是 …

小土堆pytorch--現有網絡模型的使用及修改

現有網絡模型的使用及修改 一級目錄二級目錄三級目錄 現有網絡模型的使用及修改1.VGG16模型VGG16網絡模型簡介**核心特點****網絡結構細節****優缺點與應用****變種與后續發展** 2. 使用vgg16模型 一級目錄 二級目錄 三級目錄 現有網絡模型的使用及修改 1.VGG16模型 VGG16…

Oracle 正則表達式匹配(Oracle 11g)

1、連續2詞漢字重復或3詞漢字重復(不會忽略符號) ([^ \u4e00-\u9fa5\S]{2,3})\1 例如:阿富、 SELECT REGEXP_replace(阿富、阿富、 阿富汗、 , ([^ \u4e00-\u9fa5\S]{2,3})\1, 重復) FROM dual結果: 2、連續2詞漢字重復或3詞…

對話魔數智擎CEO柴磊:昇騰AI賦能,大小模型融合開啟金融風控新范式

導讀:#昇騰逐夢人# AI已經成為金融機構核心競爭力的關鍵要素。專注AI金融賽道的魔數智擎,通過大小模型融合,讓AI成為銀行的“金融風控專家”。 作者 | 小葳 圖片來源 | 攝圖 在AI涌向產業的時代賽跑中,開發者是絕對的主角。 昇騰…

IDEA使用Git進行commit提交到本地git空間后撤回到commit版本之前

一、前言 Git作為最流行和最全面的版本控制工具,非常好用,但是操作也會比SVN復雜一些。畢竟有得有失嘛,所以我選擇Git,最近在工作中,一不小心吧一些無關緊要的文件commit了。還好在Push之前看到,不過就算P…

GitHub 趨勢日報 (2025年05月26日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1Fosowl/agenticSeek完全本地的馬努斯AI。沒有API,沒有200美元的每…

Matlab實現LSTM-SVM時間序列預測,作者:機器學習之心

Matlab實現LSTM-SVM時間序列預測,作者:機器學習之心 目錄 Matlab實現LSTM-SVM時間序列預測,作者:機器學習之心效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 該代碼實現了一個結合LSTM和SVM的混合模型,用于時間…

深入解析Spring Boot與Redis集成:高效緩存與性能優化實踐

深入解析Spring Boot與Redis集成:高效緩存與性能優化實踐 引言 在現代Web應用開發中,緩存技術是提升系統性能的重要手段之一。Redis作為一款高性能的內存數據庫,廣泛應用于緩存、消息隊列等場景。本文將深入探討如何在Spring Boot項目中集成…

Jmeter一些元件使用的詳細記錄

1、csv數據文件處理 文件放在bin目錄下,屬于相對路徑讀取文件,如果使用絕對路徑則需要改為l添加盤符的路徑,如:D:/apach/jmeter/bin 說明: 當選擇False時,如果請求的次數 大于 文件中的有效數據行數&…

使用 Cursor 從 0 到 1 開發一個全棧 chatbox 項目

大家好,我是 luckySnail,你肯定用過 AI 聊天工具。例如: Gemini,ChatGPT,claude AI 等產品,我們通過它們的 web 網站或者手機應用提出問題,得到答案。在之前如果你想要構建一個這樣的 AI 聊天應…

嵌入式學習的第二十六天-系統編程-文件IO+目錄

一、文件IO相關函數 1.read/write cp #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h> #include<unistd.h> #include<string.h>int main(int argc, char **argv) {if(argc<3){fprintf(stderr, …