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