量守門人:UnityStarter 24 條 Roslyn 分析器規(guī)則完整清單)
【免費下載鏈接】UnityStarterProduction-ready modular Unity framework: UE-inspired Gameplay Ability System, zero-GC core, HybridCLR hot-update, Luban config pipeline,>項目地址https://gitcode.com/gh_mirrors/un/UnityStarter點擊查看免費下載UnityStarter 內(nèi)置一套名為 CycloneGames.Analyzers 的 Roslyn 分析器Roslyn Analyzer模塊相當(dāng)于 Unity 項目的代碼質(zhì)量守門人它在編譯期自動掃描代碼把 GC 分配、GameObject.Find、async void 這類隱患攔在提交之前。本文整理出全部 24 條已實現(xiàn)規(guī)則的完整清單幫你快速掌握這套 Unity 代碼質(zhì)量工具的規(guī)則體系。分析器是什么編譯期就把隱患攔住傳統(tǒng)做法是等運行時卡幀、出 Bug 了再回頭排查而 UnityStarter 的 Roslyn 分析器把檢查前移到編譯期——只要代碼不符合團(tuán)隊約定Unity 編輯器打開時錯誤窗口Error Window就會給出提示甚至直接報編譯錯誤。模塊位于 UnityStarter/Analyzers/CycloneGames.Analyzers/規(guī)則定義集中在規(guī)則 ID 聲明DiagnosticIds.cs規(guī)則描述與默認(rèn)嚴(yán)重級別DiagnosticRules.cs五大規(guī)則分類DiagnosticCategories.cs中文說明文檔README.SCH.md項目還自帶一套真實編譯驗證工具CycloneGames.Analyzers.Verifier/會在隔離的臨時 Unity 工程中實際編譯一段違規(guī)代碼確認(rèn)分析器真的能觸發(fā)診斷而不是紙面規(guī)則。24 條規(guī)則完整清單按 5 大分類速查所有規(guī)則 ID 統(tǒng)一以CG開頭。DiagnosticIds共聲明 28 個 ID其中24 條已實現(xiàn)、4 條為預(yù)留詳見文末。1?? 性能類CycloneGames.Performance守護(hù)熱路徑ID規(guī)則觸發(fā)場景默認(rèn)級別CG0001熱路徑中的foreachIL2CPP 下枚舉器可能產(chǎn)生分配建議改for索引循環(huán)WarningCG0002熱路徑中的 LINQLINQ 會產(chǎn)生臨時可枚舉對象/委托WarningCG0003熱路徑中的字符串構(gòu)造插值、string.Format、拼接都會分配WarningCG0004熱路徑中的Camera.main本質(zhì)是隱藏的FindGameObjectWithTag場景搜索WarningCG0041鏈?zhǔn)絚omponent.transform訪問每次訪問都是 native 互調(diào)應(yīng)緩存 TransformWarningCG0043熱路徑中的Debug.Log每幀打印既分配又拖慢WarningCG0044熱路徑中的GetComponentT昂貴的 native 互調(diào)應(yīng)緩存結(jié)果WarningCG0045熱路徑中的裝箱轉(zhuǎn)換值類型賦給 object/接口會觸發(fā)裝箱WarningCG0046熱路徑中的 lambda / 匿名方法可能分配委托Warning2?? 安全類CycloneGames.Safety禁止危險 APIID規(guī)則為什么危險默認(rèn)級別CG0010生產(chǎn)代碼中的GameObject.Find脆弱且慢應(yīng)使用序列化引用、DI 或注冊表ErrorCG0011場景級FindObjectOfType系列 APIO(n) 全場景搜索ErrorCG0012SendMessage/BroadcastMessage基于字符串、無編譯期安全ErrorCG0013MonoBehaviour.Invoke系列 API字符串方法查找建議改UniTask.Delay或顯式計時器ErrorCG0014Resources.Load繞過項目資產(chǎn)管理管線資產(chǎn)管線 Provider 實現(xiàn)可語義豁免Warning3?? 規(guī)范類CycloneGames.Convention保持代碼風(fēng)格ID規(guī)則說明默認(rèn)級別CG0030MonoBehaviour上的 public 實例字段建議[SerializeField] private 屬性嵌套 struct/普通 class 不誤報WarningCG0031Runtime 代碼中的using static降低可讀性要求顯式限定類型WarningCG0032Runtime 代碼中的#region常掩蓋糟糕的組織方式建議拆小類型Info默認(rèn)關(guān)閉CG0033框架代碼中的[Obsolete]框架 API 直接刪除并更新調(diào)用方不留廢棄接口Warning4?? API 契約類CycloneGames.ApiContract統(tǒng)一日志契約ID規(guī)則說明默認(rèn)級別CG0049繞過統(tǒng)一日志 API受治理的程序集禁止直接調(diào)用Debug.Log*、print、Console.Write*等必須走日志門面ErrorCG0050日志門面之外調(diào)用LogChannel.Create每個程序集只允許一個可發(fā)現(xiàn)的日志門面邊界Error這兩條規(guī)則守護(hù)的是 UnityStarter 的統(tǒng)一日志系統(tǒng)——所有模塊的日志都收斂到各自的 assembly log facade例如CycloneGames.Audio.Runtime的Diagnostics/AudioRuntimeLog.cs由門面統(tǒng)一投遞到 Unity Console、文件等 sink。效果上Console 里每條日志都帶分類標(biāo)簽且可點擊跳轉(zhuǎn)到源碼行官方說明兩條日志規(guī)則刻意不提供 CodeFix——因為安全替換涉及模塊分類、異常上下文、延遲格式化等決策單個調(diào)用點無法推斷見 README.SCH.md 第 121 行附近的說明。5?? Unity 最佳實踐類CycloneGames.UnityBestPracticesID規(guī)則說明默認(rèn)級別CG0040Runtime 代碼中的async void異常無法捕獲建議async UniTaskErrorCG0042Editor 目錄外使用UnityEditor命名空間應(yīng)移入 Editor 代碼或包UNITY_EDITORWarningCG0047引用 UniTask 時使用async TaskTask是 class 必分配UniTask是 struct 可池化WarningCG0048靜態(tài)類循環(huán)依賴風(fēng)險通過調(diào)用鏈成環(huán)檢測建議拆出非靜態(tài)幫助類Warning分階段強制策略從 Warning 到 Error 的平滑遷移規(guī)則不是一刀切。項目通過 Assets 根目錄的 Default.rulesetUnity 會自動應(yīng)用到全工程管理強制策略規(guī)則策略CG0010保持Error生產(chǎn)代碼零容忍CG0011 / CG0013暫降為Warning——存量調(diào)用點遷移完成前避免啟用分析器 編譯中斷這份策略文件由契約測試UnityActivationArtifactTests.cs守護(hù)只有當(dāng) owning 模塊還清遷移債才允許把 Warning 提升為 Error。此外CG0010/CG0011對Editor/、Tests/、Samples/目錄下的代碼保持沉默——編輯器工具和測試?yán)镒鰣鼍皰呙枋呛戏ㄐ袨?。附贈能? 個 CodeFix 一鍵修復(fù)并非所有規(guī)則都只有報錯以下兩條支持一鍵修復(fù)源碼見 CodeFixes/診斷修復(fù)動作CG0001集合具備Count/Length和 int 索引器時自動把foreach轉(zhuǎn)換為for索引循環(huán)ForEachToForCodeFix.csCG0004自動新增緩存的Camera字段并在Awake中賦值替換熱路徑里的Camera.mainCameraMainCachingCodeFix.cs熱路徑怎么算別誤傷熱路徑規(guī)則只針對每幀執(zhí)行的方法默認(rèn)命中以下方法名Update, LateUpdate, FixedUpdate, OnGUI, Tick, OnTick, OnUpdate, PreUpdate, PostUpdate, OnPreTick, OnPostTick設(shè)計原則是寧可漏報、不可誤報——大范圍誤報只會逼著團(tuán)隊去禁用分析器那才是對代碼質(zhì)量最大的傷害。如何在項目中啟用與調(diào)整規(guī)則確認(rèn)激活項目已通過 Assets/Analyzers/CycloneGames.Analyzers.dll 及其.meta帶RoslynAnalyzer標(biāo)簽激活模板開箱即用。調(diào)整 Unity 編譯嚴(yán)重級別修改 Default.ruleset例如Rule IdCG0011 ActionWarning /。兼容 IDE / 獨立 .NET 宿主用.editorconfig例如dotnet_diagnostic.CG0001.severity error。局部抑制要克制僅當(dāng)分配或 API 成本是有意行為并記錄原因時才使用#pragma warning disable CG00xx包裹。一條新規(guī)則要默認(rèn)啟用還需過質(zhì)量門檻語義級檢查而非脆弱的字符串匹配、正例反例測試齊全、對現(xiàn)有 UnityStarter 模塊零/低誤報、改寫安全才配 CodeFix。預(yù)留規(guī)則4 個已占位的 ID以下 ID 已在 DiagnosticIds.cs 中聲明但尚未實現(xiàn)屬于規(guī)劃中的規(guī)則CG0015NativeContainerLeak原生容器泄漏CG0022ActorStartBaseCall重寫Actor.Start必須調(diào)用base.Start()否則BeginPlay()不觸發(fā)CG0023PoolOnDespawnOverrideFastObjectPool子類必須重寫OnDespawn防止池化對象狀態(tài)泄漏CG0024GameplayTagImplicitCastGameplayTag 的字符串隱式轉(zhuǎn)換應(yīng)先校驗這 4 條在 DiagnosticRules.cs 中已寫好診斷描述屬于規(guī)則先行、實現(xiàn)待補的預(yù)留位也說明這套規(guī)則清單還在持續(xù)演進(jìn)??偨Y(jié)UnityStarter 的 Roslyn 分析器把零 GC 熱路徑、安全 API、統(tǒng)一日志、框架規(guī)范四大主題拆成 24 條可執(zhí)行規(guī)則用編譯期強制替代事后救火配合分階段升級策略避免存量代碼被誤傷。對新手來說讀懂這份清單也就讀懂了這個框架對代碼質(zhì)量的期待。 延伸資料規(guī)則總覽英文README.md分析器測試用例CycloneGames.Analyzers.Tests/統(tǒng)一日志包說明CycloneGames.Logging.Unity/README.SCH.md贊分享【免費下載鏈接】UnityStarterProduction-ready modular Unity framework: UE-inspired Gameplay Ability System, zero-GC core, HybridCLR hot-update, Luban config pipeline,>項目地址https://gitcode.com/gh_mirrors/un/UnityStarter點擊查看免費下載相關(guān)推薦5分鐘掌握Balena Etcher開源鏡像燒錄工具的終極使用指南5分鐘掌握Balena Etcher開源鏡像燒錄工具的終極使用指南 在嵌入式開發(fā)、單板計算機系統(tǒng)部署和操作系統(tǒng)安裝過程中鏡像燒錄工具是每個開發(fā)者必備的利器。桌面應(yīng)用嵌入式開發(fā)工具Simple Icons代碼質(zhì)量保障ESLint規(guī)則與代碼審查清單Simple Icons代碼質(zhì)量保障ESLint規(guī)則與代碼審查清單 在開源項目開發(fā)中代碼質(zhì)量是項目可持續(xù)發(fā)展的基石。Simple Icons作為一個專注于提前端UI組件pi-subagents 未來展望AI 代理編排技術(shù)的發(fā)展趨勢pi subagents 未來展望AI 代理編排技術(shù)的發(fā)展趨勢 pi subagents 作為一款專注于異步子代理委托的 Pi 擴展通過任務(wù)截斷、成果物管理人工智能AI Agent多智能體Agent 編排代碼智能體AI 技能上一篇告別數(shù)據(jù)混亂Univer自定義數(shù)據(jù)驗證規(guī)則完全指南下一篇虛擬機性能突破指南WinApps基于KVM的終極優(yōu)化方案創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考