【问题标题】:Rename class in external dll without losing reference to it in unityEditor重命名外部 dll 中的类,而不会在 unityEditor 中丢失对它的引用
【发布时间】:2015-04-23 11:01:02
【问题描述】:

我们有一个包含我们所有代码的 visualstudio 解决方案,它与我们的统一项目完全分离。 当我们在 visualstudio 中将代码构建到 dll 中时,该 dll 会被复制到统一项目的插件文件夹中,因此我们可以在统一项目中使用其中的类。

这一切都很好,但问题是当我们在 Visual Studio 解决方案中重命名一个类、重建 dll 并返回统一项目时,对重命名类的引用在我们的场景和/或预制件中丢失了。 ..

我查看了场景和预制文件,发现对 dll 中类的引用定义如下:

m_Script:{fileID:698634159,guid:aa20b9c3579870b40bb96d13672546a3,类型:3}

我在论坛上看到fileID是根据类文件的命名空间和名称生成的,所以逻辑上当类被重命名时,这个fileID发生了变化,unity不知道它需要引用重命名的类。

有没有办法定义某种硬引用,所以重命名类时引用不会丢失?或任何其他防止参考丢失的建议。

我也尝试在 dll 中包含一个带有 guid 的元文件,但 unity 似乎没有考虑这个元文件,因为它总是将 dll 的 guid 与生成的 fileId 一起使用。

【问题讨论】:

    标签: dll visual-studio-2013 unity3d unity3d-editor


    【解决方案1】:

    Unity 无法自动发现您已重命名 DLL 中的某些类。对于任何形式的项目都是如此:如果您依赖于某个 DLL,并且 DLL 中的类发生了变化,则没有重命名的迹象。

    链接它们的最佳方式是在解决方案中添加您的 Unity 项目,并在 Unity 项目和另一个项目之间建立依赖关系。那么也许重构工具会建议你在 Unity 项目中重命名。

    【讨论】:

    • 好吧,我并不是真的要求统一自动找出,我想找到一种方法来从统一硬引用我的类,所以当我重命名时,依赖关系不会丢失或移动我的班级。类上带有 guid 的注释之类的东西会非常方便,但统一似乎与基于名称和命名空间生成的 fileid 链接
    • 不要认为类有太多的硬链接。请注意,它存在于脚本值:[FormerlySerializedAs("myValue")]。但这并不能解决您的问题。
    • 问题是你不能真正使用重构工具来重命名预制件/场景上的引用
    • 使用手动表 oldName -> newName,您也许可以使用 editorScript 来更改所有内容。
    • 这样做的问题是unity不使用名称,而是使用fileid的,所以scenefile中还有一个旧的文件id,但是你必须知道哪个fileid是旧的然后替换为新的文件ID。找出这些 fileid 的唯一方法是将它们添加到一个空场景中,然后在场景文件中查找 id……在重命名多个类的重构之后,这是一项相当繁琐的任务……跨度>
    【解决方案2】:

    这是一个非常好的工具来查找和替换丢失的脚本,我认为这是您遇到的错误。

    http://daikonforge.com/forums/resources/fix-missing-scripts.3/

    解压 Unity3d 包后,它会附带源代码,因此您可以根据需要对其进行自定义。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 2016-05-16
      • 2015-03-30
      • 2017-08-23
      • 1970-01-01
      • 2011-09-17
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多