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模式,或存在持续持有引用、重复赋值不清理、长生命周期对象缓存后未释放等导致无法回收的情况时,才允许按实际影响报问题。