Unity_程序集_.asmdef_引用命名域失败
文章目录
- 一、问题
- 二、解决方案
- 三、总结
我在学习Unity官方FPS样例,需要修改交互的操作方式,由鼠标控制摄像头改为用陀螺仪控制,陀螺仪需要一个插件,有一些脚本获取陀螺仪数据,因为需要修改FPGS的玩家控制,需要引用陀螺仪插件脚本命名域,但是报错!!!!。最后在将目录树复制发给ai得到解决。
一、问题
下面是AI回答:
问题所在
当一个文件夹(及其子文件夹)中没有 .asmdef 文件时,它所有的脚本都会被编译进一个 Unity 自动创建的、特殊的“默认程序集”中,这个程序集的名字叫 Assembly-CSharp.dll。
而您的 PlayerCharacterController 脚本位于 Assets/FPS/Scripts 目录下,这个目录有一个 .asmdef 文件。这意味着您的脚本被编译到了一个自定义的程序集里(我们称之为 FPS.Scripts 程序集)。
核心规则是:自定义程序集(比如 FPS.Scripts)默认无法引用默认程序集(Assembly-CSharp.dll)中的代码。 这是一条“单行道”,默认程序集可以引用自定义程序集,但反过来不行。
所以,情况是这样的:
Uduino 的代码在 Assembly-CSharp.dll 中。
PlayerCharacterController 的代码在 FPS.Scripts.asmdef 定义的程序集中。
FPS.Scripts 无法“看到” Assembly-CSharp.dll,因此 using Uduino; 失败。
解决方案
您有两种选择,强烈推荐第一种,因为它是最规范、最有利于项目长期维护的做法。
.asmdef 文件就是下面图片显示这个玩意:
二、解决方案
方案一(最佳实践):为 Uduino 创建 .asmdef 文件
这个方法是将 Uduino 这个第三方库也变成一个独立的、可被引用的模块。
在 Unity 的 Project 窗口中,导航到 Assets/Uduino/Scripts 文件夹。
在该文件夹内,右键点击 -> Create -> Assembly Definition。
Unity 会创建一个新的 .asmdef 文件,请将其命名为 Uduino。
等待 Unity 自动完成一次脚本重编译。
现在 Uduino 也有了自己的程序集了! 接下来,执行我们最开始的步骤:
导航回您的 Assets/FPS/Scripts 文件夹,找到并单击选中您的 .asmdef 文件 (例如 FPS.Scripts.asmdef)。
在 Inspector 窗口中,找到 “Assembly Definition References” 区域。
点击 “+” 号。
在新出现的栏位中,点击右侧的小圆圈,然后从列表中选择刚刚创建的 Uduino。
点击 “Apply” 保存。
现在,你的 FPS.Scripts 程序集就明确地引用了 Uduino 程序集,问题解决。
添加对方.asmdef 文件:
三、总结
需要在这两个代码文件夹下找到.asmdef 文件,在要引用对方代码.asmdef 文件中添加对方的.asmdef 文件。如果一个有,另一个没有可以创建一个.asmdef 文件。