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

如何配置Dotfuscator避免子类与父类字段重名干扰Unity序列化?

配置Dotfuscator避免继承体系内字段名称重复

问题概述

使用Dotfuscator社区版混淆Unity项目DLL时,出现继承类字段重名的情况,触发Unity序列化报错。原代码结构:

public class MyParentClass : MonoBehaviour {
  private int foo;
}

public class MyChildClass : MyParentClass {
  private int bar;
}

混淆后字段名被重命名为相同标识符:

public class A : MonoBehaviour {
  private int a;
}

public class B : A {
  private int a;
}

尽管这是合法C#代码,但Unity会尝试序列化所有私有字段(无论是否标记[Serializable]),因此抛出「同一字段名在类或其父类中被多次序列化,此操作不被支持」的错误。我们需要保留字段重命名的混淆效果,而非禁用重命名,因此需配置Dotfuscator避免继承链内字段名重复。

解决方案:启用分层名称唯一性规则

Dotfuscator提供了专门的配置项,确保继承层次结构内的字段名称唯一,具体操作如下:

图形界面配置

  1. 打开Dotfuscator项目文件(.dfproj)。
  2. 切换到Rename选项卡,找到"Options"区域。
  3. 勾选Ensure unique names within each hierarchy(确保每个层次结构内名称唯一)选项。

手动编辑配置文件

如果直接编辑.dfproj的XML内容,在<rename>模块下添加以下配置:

<rename>
  <!-- 其他已有配置 -->
  <options>
    <hierarchicalnamingunique>true</hierarchicalnamingunique>
  </options>
</rename>

启用该规则后,Dotfuscator在混淆时会保证子类字段名称不会与父类(及所有祖先类)的字段名称重复,既保留了混淆效果,又避免触发Unity的序列化错误。

进阶:针对Unity类精准配置

如果只想对继承自MonoBehaviour的类应用该规则,可以创建自定义筛选规则:

  1. 在Dotfuscator的Rename选项卡中,添加新的规则集。
  2. 设置筛选条件为Type is subclass of,目标类型选择UnityEngine.MonoBehaviour。
  3. 对该规则集启用"Hierarchical Name Uniqueness"选项。

这样可以只针对Unity相关类生效,不影响其他非Unity类的混淆策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:12:56