首页 文章

如何将MonoBehaviour移动到外部组件并且不会卡在“Missing(mono script)”中?

提问于
浏览
4

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

现在我想将其中一些脚本移动到一个单独的程序集(类库),因为我们需要在其他项目中使用它们,我们希望改进我们的代码组织 .

因此,当我将脚本移动到此外部类库项目并将.dll放入Unity3D资源文件夹中时,所有引用移动脚本的游戏对象都会警告“Missing(mono script)” .

我想Unity3D会按脚本名称和程序集名称跟踪脚本引用 .

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

2 回答

  • 2

    不幸的是,在Unity中没有自动执行此操作的方法 . 你是对的,因为Unity保留了对MonoBehaviour的引用 . 你有几个选择,没有一个是理想的:

    选项1:将当前项目中的MonoBehavi重命名为“MB_XXX”,其中XXX是脚本的名称 . 通过Unity编辑器执行此操作,Unity将保留参考 . 然后将包含MonoBehaviours的已编译DLL与您实际想要使用的名称一起导入 . 遍历每个对象,从DLL中添加适当的MonoBehaviour并删除MB_XXX行为 . 使用资产商店中的某个Unity资产将数据从一个MonoBehaviour复制到另一个MonoBehaviour,这样您就不必重新输入设置 .

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

    不幸的是,这些并不是理想的解决方案,您只需要将它放在一边 .

  • 0

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

    创建该工具是为了尝试解决此问题 . 它搜索具有“缺少脚本”问题的预制件并修复它们 .

    这篇文章的更多细节:Fixing "Missing (Mono Script)" .

相关问题