如何将单行为移动到外部组件并且不卡在"Missing (mono script)"中?



我在Unity3D的游戏项目中有许多脚本(MonoBehaviour),其中许多脚本被我的场景中的gameObjects所引用。

现在我想把这些脚本中的一些移动到一个分离的程序集(类库),因为我们需要在其他项目中使用它们,并且我们希望改进我们的代码组织。

所以,当我将脚本移动到这个外部类库项目并将。dll放入de Unity3D资产文件夹中时,所有引用移动脚本的游戏对象都会警告"Missing (mono script)"。

我想Unity3D会通过脚本名称和程序集名称跟踪脚本引用。

有人知道解决这个问题的方法吗?

不幸的是,在Unity中没有自动做到这一点。你是正确的,Unity维护了对MonoBehaviour的引用。你有几个选择,没有一个是理想的:

选项1:将当前项目中的monobehaviour重命名为"MB_XXX",其中XXX是脚本的名称。通过Unity编辑器执行此操作,Unity将维护引用。然后导入编译后的DLL,其中包含monobehaviour和您实际想要使用的名称。遍历每个对象,从DLL中添加适当的MonoBehaviour并删除MB_XXX行为。使用一个Unity资源从资源存储复制数据从一个MonoBehaviour到另一个,这样你就不必重新输入你的设置。

选项2:创建一个shell脚本,将资产中的引用ID从当前使用的MonoBehaviour更改为DLL中的引用ID(以文本格式保存您的资产)。幸运的是,Unity允许你拥有同名的monobehaviour,至少在你尝试运行游戏之前是这样。你将需要获得DLL中每个monobehaviour的参考id——你可以通过将DLL中的所有monobehaviour添加到一个空的GameObject中,然后查看生成的资产文件来查看参考id是什么来实现这一点。

不幸的是,这些都不是理想的解决方案,你只能随心所欲。

我在项目Giacomelli.Unity.EditorToolbox中创建了一个名为" Missing script resolver "的工具。

这个工具是用来解决这个问题的。它搜索有"缺少脚本"问题的预制件并修复它们。

在这篇文章中更多的细节:修复"失踪(Mono脚本)"。

最新更新