跳到主要內容

發表文章

目前顯示的是 10月, 2025的文章

Unity CPU Profiler 記錄

  Case1、基礎profiler查看 開啓 profiler 后,進入游戲查看目前卡頓情況,其中一個如上圖,點開 main thread 發現一個紅色 gc cost ,拉大后點進去看發現是 AI 尋路那邊的計算造成 gc cost 在 timeline 里面顔色為藍色的就是 Scripts ,然後點擊某個block可以看到上面 CPU Usage 顯示對應的 overload 是那些 Case2、查看進入戰場 Profiler 1-1、Mono.JIT 從上圖點 peak 位置,對應下面有個藍色block,點了之後選擇 show hierarchy   再展開 Dotween 可以發現是第一次載入 DOTween.dll 造成 Mono.JIT 1-2、Instantiate 進入戰場第二個 peak 繼續查看,發現呼叫了 602 次 Instantiate ,裏面包含了 Awake 、 Produce 、Copy 查看第一個 Awake,發現是 spine-unity.dll SkeletonRenderer.Awake() 第二個 Produce 裏面則是 Unity.TextMeshPro.dll ,TextMeshPro..ctor()

UI Animation 路徑異動修改工具

 這幾天在製作介面做好了后才發現美術的 animation 因爲路徑變動而出現 missing,以前項目一直沒花心思去處理這塊,後來才發現其實直接處理變動路徑就可以達到目的,不用再回頭調整 animation 工具思路是將 Animation 中出現 obj missing 的路徑做檢查,如果名稱跟填入的規則有一致,那就自動換成新的路徑名稱,再保存回去 下面是出現 missing 的 animation 我們將兩個出現 missing 的路徑分別填入並置換成新的路徑名稱,並點選 開始 Rebind 處理完畢后的效果,missing 都沒了,animation 也正常了 實現方式如下 void RebindAnimation ( AnimationClip clip , GameObject root )     {         var bindings = AnimationUtility . GetCurveBindings ( clip );         int fixCount = 0 ;         foreach ( var binding in bindings )         {             var obj = AnimationUtility . GetAnimatedObject ( root , binding );             // 若找不到原物件             if ( obj == null )             {                 string newPath = TryReplacePath ( binding ....

Friday Steam Next Fest Q&A

Friday Steam Next Fest Q&A ### Summary 本影片由遊戲行銷專家Chris主持,圍繞 Steam NextFest 2025 的現狀、數據分析以及遊戲開發者如何利用這個活動提升遊戲曝光率進行詳細講解。影片內容涵蓋NextFest的運作機制、獲得願望單的關鍵因素、不同類型遊戲的表現差異和演算法原理,同時透過答疑環節澄清許多開發者常見誤解,並強調專注製作優質Demo和合理利用內容創作者的重要性,最後鼓勵開發者減少對數據過度解讀,務實創作和積極推廣。 ### Key Points #### 影片開頭部分(0:12–20:00):活動準備與NextFest基礎介紹 - [00:12] 主持人簡單調試設備,確認聲音畫面正常,為直播正式開始做準備。 - [02:07] 介紹Steam NextFest 2025活動,邀請觀眾分享是否參與以及連結自己的遊戲,強調這是一個遊戲開發者展示Demo和獲取曝光的機會。 - [05:18] 強調Steam NextFest期間的課程促銷活動,鼓勵開發者利用促銷機會學習遊戲行銷。

用 unity memory profiler 查 memory 使用問題

記憶體使用概覽 Total Allocated (總分配記憶體): 1.31 GB 這是Unity向系統申請的總記憶體量 可以超過裝置的實際可用記憶體而不會出問題 Total Resident On Device (裝置常駐記憶體): 0.62 GB 這是實際佔用裝置實體記憶體的量 這個數值才是真正影響裝置效能的關鍵指標 分配記憶體分布詳解 1. Executables & Mapped (0.52 GB) - 黃色 可執行檔和映射檔案佔用的記憶體 包括Unity引擎程式碼、你的遊戲程式碼、第三方函式庫等 2. Native (278.9 MB) - 綠色 Unity引擎本身使用的C++層記憶體 包括: 渲染系統( Mesh 、 Material 、 Shader 等) 音訊系統 物理引擎 粒子系統 動畫系統等Unity底層元件 3. Managed (196.6 MB) - 藍色 C#腳本使用的托管記憶體 由 Mono 或 IL2CPP 虛擬機管理 包括你寫的C#程式碼建立的所有物件 下方的「 Managed Heap Utilization 」顯示詳情: Virtual Machine: 124.2 MB(虛擬機本身) Empty Heap Space: 39.7 MB(空閒堆疊空間) Objects: 32.7 MB(實際C#物件) 4. Graphics (Estimated) (163.6 MB) - 紫色斜紋 GPU顯示記憶體的估算值 包括紋理、渲染目標、幀緩衝等 注意是「估算」,實際值可能有差異 5. Untracked (165.4 MB) - 灰色斜紋 未被分類追蹤的記憶體 可能包括: 第三方外掛的記憶體使用 系統層級的記憶體開銷 Profiler 無法準確歸類的記憶體 Unity物件類別(Top Unity Objects Categories) 顯示了哪些類型的Unity物件佔用最多記憶體: Texture2D : 138.8 MB(最大宗,紋理資源) Shader : 24.8 MB RenderTexture : 15.6 MB Font : 15.5 MB AudioClip : 14.1 ...

使用 superluminal 進行性能查閲

  使用 Superluminal 可以快速的查看到 c++ 層級 profiler 訊息,當然這些是 unity profiler 無法查看到的,下面先 attach unity 并且執行 f8 打包工具,執行 Superluminal analyze 后如下圖 Case1.執行打包 中間的 timeline 訊息可以排序,根據 timer 排序,下面展開就可以看到 cost 在 F8 framework ,再從左側點 BuildAssetBundles , 右側會顯示出項目中對應的 function 接下來,在 timeline 中展開 worker,會出現火焰圖 將 Worker 展開,拉到下面,可以看到 F8Framework BuildAssetBundles 最終呼叫到 Unity.dll!BuildAssetBundles 點選其中 BuildAssetBundles,下方會出現 call graph 層級,右邊則會展開 source/assembly call graph,在進行 low level profiling 上能夠幫到不少 Case2. 游戲執行時 來查找目前游戲的運行 performance cost 在哪,一樣的步驟然後找到最高的 Exclusive,點擊後,我們可以看到右側的 c# 負載比較高的在 RenderCombinedMesh.cs ,這塊是在處理 spine outline 的功能,游戲執行時在 frame 中運行重建 mesh,所以性能消耗很大 從 Function time distribution 也可以看出,整體的負載在 vertices、uv、triangle,基本上就是 geometry 底層的固定消耗。 從右側看,大致上消耗就在 array.copy 上

comfyUI 運行出錯 FATAL: kernel fmha_cutlassF_f32_aligned_64x64_rf_sm80 is for sm80-sm100, but was built for sm37

在公司的圖形機器上運行 ComfyUI + WAN 時出現下面問題   FATAL: kernel fmha_cutlassF_f32_aligned_64x64_rf_sm80 is for sm80-sm100, but was built for sm37 算圖機使用的 torch 版本如下 torch 2.7.1+cu118 torchaudio 2.7.1+cu118 torchsde 0.2.6 torchvision 0.22.1+cu118 檢查 cuda 版本 GeForce RTX 5090 CUDA Version: 13.0 從官網看 RTX 5090 支持 12.0 版本 CUDA 這是因爲本地的 pytorch 版本太舊 到官網查詢版本 https://pytorch.org/get-started/locally/ $ pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu126 查詢目前版本 $ pip list | findstr torch 使用這個版本后出現下面問題 後面查詢 no kernel image 問題其實還是 pytorch 並不支持 sm_120( Blackwell架構) 查看后發現并沒有支持 sm_120 CUDA architectures : [' sm_37 ', 'sm_50', 'sm_60', 'sm_61', 'sm_70', 'sm_75', 'sm_80', 'sm_86', 'sm_90', 'compute_37'] sm_50, sm_52, sm_53 : Maxwell (GTX 900 系列) sm_60, sm_61, sm_62 : Pascal (GTX 1000, P100) sm_70, sm_72, sm_75 : Volta/Turing (V100, RTX ...

unity 6.0 打包 ab 資源

在 Unity 6.0 中,AssetBundle(AB)打包流程比以往更穩定,也更適合搭配 Addressables 或自訂更新系統使用。 以下將簡要說明從插件安裝、資源標記到生成檔案的完整步驟。   🧩 1. 安裝 AssetBundle Browser 開啟 Package Manager → Add package from git URL ,輸入: https: //github.com/Unity-Technologies/AssetBundles-Browser.git 安裝完成後,於 Unity 選單中可找到 Window → AssetBundle Browser 。 📦 2. 設定與標記資源 在 Project 視窗中,選擇要打包的資源(模型、材質、音效等), 於 Inspector 底部設定 AssetBundle 名稱與可選 Variant 。 建議命名規則統一,例如: character_ui environment_main audio_battle 💡 若資源間存在相互依賴,Unity 會自動建立引用關係,無需手動綁定。   ⚙️ 3. 使用 Browser 打包 開啟 AssetBundle Browser,選擇「Build → Build All Bundles」。 系統將在指定目錄下產生所有 AB 檔案及對應的 .manifest 資訊。 完成後,可在 Browser 的 Build 分頁中檢視每個資源包大小與依賴關係。 📁 4. 檢查輸出檔案 打包完成後,會產生兩類關鍵檔案: xxx.manifest :記錄 AB 資源依賴、CRC、壓縮格式等。 AssetBundleMap.json :列出全部 AB 檔案及 MD5 校驗,用於版本控制與熱更新比對。 建議在發佈流程中自動比對 MD5 ,以確保伺服端與用戶端資源一致。 ab 對應的 manifest 檔案如下 查看 AssetBundleMap.json 其中的 MD5 如下

unity 高風險漏洞處理

遊戲開發平臺Unity通報高風險漏洞,可能被濫用執行任意程式碼  https://www.ithome.com.tw/news/171569 查看各個版本的 release note https://unity.com/releases/editor/archive https://unity.com/releases/editor/whats-new/6000.0.58f2#notes 可以看到  Unity 6000.0.58f2 這個版本進行了修正,那就安裝這個版本 選擇安裝  Unity 6000.0.58f2   Hub 版本 更新到 3.14.3 再開啓后可以看到未使用修正版本的項目會有紅色感嘆號 開啓項目后提示 packagemanager 需要更新 更新完之後發現 Rdier 插件版本需要更新,那就更新上去 測試下打包,發現有錯誤 Currently selected scripting backend( IL2CPP ) is not installed. 回到 hub 安裝 component (IL2CPP) 這樣就完成了升級版本

resources目錄爲什麽不能放過多資源

unity官方説過 Resources 目錄不適合太大,適合放小量資源 特地打包資源看下,發現 resources 的資源會被打包成1個檔案, unity打包PC后目錄内容如下  在項目目錄下的 resources 打包後是變成 Build/Data 下的 resource.assets.resS、resource.assets resources.assets → 包含每個資源的 metadata (描述資訊、路徑、序列化結構、指向 data 的 offset)。 resources.assets.resS → 存放 實際的資源二進位數據 (貼圖像素、音訊樣本、Mesh 資料等)。 (即 data stream) 全都資源都放到 resources 會有以下問題 1. 如果 prefab 裏面的reference設計不合理,可能造成 Resources.Load< GameObject >("Prefabs/Enemy"); 后載入連帶的資源過多 2. 無法像 addressable 一樣可以設計分群,延遲載入 3. Resources.LoadAll 會出現災難 4. 未清理引用資源( Resources.UnloadUnusedAssets )

打包PC版本錯誤

 1. 打包卡在  Brotli build/Build/build.wasm.br Player Settings > Publishing Settings > Compression Format 改成 Gzip 或 Disabled , 2. webgl 錯誤無法解讀 開啓 Development Build 、 Script Debugging 、 Exception Support : Full Without Stacktrace 3. 解析度處理方式有問題 Screen . resolutions 在 webgl 下可能為空 4. out memory bounds stackTrace . GetFrame ( 0 ); 獲取 callstack 在 webgl 會出現問題