Unity中Assembly定义内脚本无法访问外部脚本的问题咨询
Unity程序集依赖问题解决方案
1. 直接给Game1的asmdef添加默认程序集引用(无需修改Common)
当你给Game1文件夹添加game1.asmdef后,Game1的脚本会被编译成独立程序集,默认不会自动引用未被asmdef包裹的脚本所在的程序集。未添加asmdef的Common脚本会被Unity编译到默认的Assembly-CSharp程序集里,你只需要手动添加这个引用:
- 选中
game1.asmdef文件,在Inspector面板找到References区域 - 点击
+号,在弹出的列表中选择Assembly-CSharp并添加 - 完成后Game1的脚本就能访问Common的命名空间,同时Game1内部脚本依然对外隐藏(其他未引用
game1.asmdef的程序集无法访问它)
2. 根目录asmdef的正确使用方式(解决你之前的无效尝试)
你在根目录添加的omkarProj.asmdef未生效,是因为此时Common脚本会被编译到omkarProj程序集而非默认的Assembly-CSharp,你需要:
- 选中
game1.asmdef,在References里添加omkarProj而非Assembly-CSharp - 这种方式适合统一管理所有未被单独asmdef包裹的脚本,但不如第一种直接,可能会包含你暂时不想处理的内容
3. 适配依赖排查的拆分方案
鉴于你需要逐个排查Common对各Game的依赖,可采用逐步拆分的方式:
- 保持Common无asmdef,让它留在默认程序集(或根目录asmdef)
- 给当前排查的Game(如Game1)添加asmdef并引用默认程序集
- 当发现Common中某脚本依赖Game1的内容时,右键该脚本选择Move to Assembly,将其移入Game1的asmdef(或新建专门的依赖程序集)
- 重复此操作,直到Common不再依赖任何Game脚本,再给Common单独添加asmdef
核心规则说明
- Unity中,只有被asmdef包裹的文件夹会生成独立程序集,未被包裹的脚本统一编译到默认的
Assembly-CSharp(或根目录asmdef指定的程序集) - 独立程序集之间默认隔离,必须通过References手动添加依赖才能互相访问
- 只要不给其他程序集添加对
game1.asmdef的引用,就能实现Game1内部脚本对外隐藏的需求
内容的提问来源于stack exchange,提问作者Omkar Patil
相关产品推荐
相关产品推荐

