Common Unity Review Rules

Common Unity Review Rules 以下规则适用于所有审查 Unity 项目代码(C 和 Lua)的 agent。 GameObject 父子关系与 Destroy / 建立父子关系后, 会 自动销毁所有子物体 反之,只销毁子物体 不会 销毁父物体 审查要点: 当代码中同时存在 SetParent 和 Destroy 调用时,检查销毁的是否是正确的层级: 如果意图是清理整个层级(父…


Common Unity Review Rules

以下规则适用于所有审查 Unity 项目代码(C# 和 Lua)的 agent。

GameObject 父子关系与 Destroy

  • transform:SetParent(parent) / transform.SetParent(parent) 建立父子关系后,Destroy(parent)自动销毁所有子物体
  • 反之,只销毁子物体不会销毁父物体
  • 审查要点: 当代码中同时存在 SetParent 和 Destroy 调用时,检查销毁的是否是正确的层级:
    • 如果意图是清理整个层级(父+子),应销毁最顶层父物体
    • 如果只销毁子物体而父物体(如 Canvas、容器 GameObject)未被销毁,则父物体会残留在场景中
  • 此规则同时适用于 C#(Object.Destroy())和 Lua(CS.UnityEngine.Object.Destroy()

Lua 语言特有审查边界

  • 禁止套用 C#/C++ 的数组越界概念: Lua 中的 table 底层是哈希表。通过未初始化的跨度索引赋值产生“中间空洞”时,系统只会在表中动态添加键值对,绝对不可能像强类型语言一样抛出 IndexOutOfRangeException 引发内存级别的越界崩溃
  • 正确识别“空洞”风险: 只有当代码中明确对这个可能带有空洞的 table 进行了 #table 获取长度运算,或者使用了 ipairs 进行循环时,非连续索引才会导致逻辑上的遍历提早截断。如果发现实质性的 Lua 遍历陷阱,应指出该逻辑错误;但严格禁止将其幻觉般地描述为“导致数组越界崩溃”。

ResourceMgr 资源释放边界

  • 涉及 ResourceMgr.LoadAsset / LoadTexture / CacheTemporarily 的资源时,若代码仅移除显式 UnloadAsset 但已释放引用(如置 nil、覆盖引用、对象生命周期结束),不得判定为内存泄漏或报 P0/P1。
  • 只有能证明该资源属于 LoadUnloadableAsset / RefCountUnloadable 模式,或存在持续持有引用、重复赋值不清理、长生命周期对象缓存后未释放等导致无法回收的情况时,才允许按实际影响报问题。