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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:35:01