You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:编译Unity DLL时Visual Studio移除Odin属性的保留方法

解决Odin属性编译后从DLL中消失的问题

1. 引用正确的Odin程序集

  • 直接从你的Unity项目目录里找Odin的DLL来引用,路径一般是Packages/Sirenix/Odin Inspector/Runtime/Sirenix.OdinInspector.dll(如果是Editor用的属性就找Editor目录下的),别用网上随便下的或者版本不对的Odin DLL。
  • 在VS的引用设置里,把这个Odin DLL的「复制本地」改成True,保证编译时属性的元数据能被正确打包进你的DLL。

2. 关闭VS的编译优化

  • 打开VS项目属性,切到「生成」标签页,取消勾选优化代码选项。有些编译优化会把没被直接调用的属性元数据给剥离掉,关了优化大概率能解决。

3. 先确认属性真的被移除了

  • 用ILSpy或者dnSpy这类反编译工具打开你编译好的DLL,看看目标类/成员上还能不能找到[HideReferenceObjectPicker]。要是反编译能看到,那只是Unity Inspector没识别到——这时候要确保Unity里的Odin正常加载,而且你的DLL是放在Assets目录下的(别丢到Packages或者其他特殊目录)。

4. 极端情况:强制保留元数据

如果上面的方法都没用,试试在项目里加这段代码,强制编译器保留属性:

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Sirenix.OdinInspector")]

另外也检查下自己的代码,确保属性是正确应用的,比如:

using Sirenix.OdinInspector.Attributes;

public class MyCustomClass
{
    [HideReferenceObjectPicker]
    public MyReferenceType MyField;
}

5. 检查版本兼容性

  • 确认你用的Odin版本和Unity版本兼容,而且VS里引用的Odin DLL和Unity项目里装的Odin版本完全一致——版本不匹配很容易导致属性元数据保留失败或者无法被识别。

内容的提问来源于stack exchange,提问作者bomfirit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:37:51