定义

Unity 脏引用是非主观需要的引用。但脏引用本身并不是错的,只是 Unity 在实现时的一个偏好,即保留所有引用。

例子

UI 的 Button 可以设置为根据不同状态切换不同图片,而之后如果修改切换方式为变换颜色,那么图片引用的选项会被隐藏。

但实际上图片引用并没有消失,这时如果你切换回根据不同状态切换不同图片,那么所有图片都还在。

以下是按钮 Prefab 的片段:

UIButton : Selectable

1
2
3
4
5
  m_SpriteState:
    m_HighlightedSprite: {fileID: 21300000, guid: c6e5ee809178c5e47a3741c1969xxxxx,
      type: 3}
    m_PressedSprite: {fileID: 21300000, guid: c6e5ee809178c5e47a3741c1969xxxxx, type: 3}
    m_DisabledSprite: {fileID: 21300000, guid: c6e5ee809178c5e47a3741c1969xxxxx, type: 3}

这种行为可能并不是我们需要的,在检查资源时经常会发现这种行为导致的错误资源被引用。

相关问题

类似的脏引用

  • Shader 中不同平台引用的图片
  • Animation 中操纵的脚本属性
  • AnimatorController 中引用的其他资源
  • 等等

解决方案

解决脏引用可以考虑以下方案:

  1. 查找两个资源间的引用的图,可以考虑使用 RelationsInspector 生成这个图
  2. 声明式资源检查修复工具,将资源中不正确的引用去除