【问题标题】:How to move a MonoBehaviour to an external assembly and don't get stuck in the "Missing (mono script)"?如何将 MonoBehaviour 移动到外部程序集并且不陷入“缺少(单脚本)”?
【发布时间】:2016-08-16 18:14:18
【问题描述】:

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

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

因此,当我将脚本移动到这个外部类库项目并将 .dll 放入 de Unity3D 资产文件夹时,我所有引用移动脚本的游戏对象都会警告“丢失(单脚本)”。

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    不幸的是,在 Unity 中没有自动执行此操作的方法。您是正确的,因为 Unity 维护了对 MonoBehaviour 的引用。您有几个选择,但没有一个是理想的:

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

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

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

    【讨论】:

      【解决方案2】:

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

      创建该工具是为了尝试解决此问题。它会搜索存在“缺少脚本”问题的预制件并进行修复。

      更多详情见这篇文章:Fixing "Missing (Mono Script)"

      【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2016-05-27
      • 2023-01-20
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多