4

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

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

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

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

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

4

2 回答 2

2

不幸的是,在 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 来实现这一点.

不幸的是,这些都不是理想的解决方案,你只需要动起来。

于 2013-05-02T22:14:56.157 回答
0

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

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

这篇文章的更多细节:修复“缺失(单声道脚本)”

于 2016-08-16T10:14:18.683 回答