【问题标题】:Adding external project to unity solution将外部项目添加到统一解决方案
【发布时间】:2017-07-27 15:17:03
【问题描述】:

我正在尝试将一个外部项目添加到我的统一解决方案中。 使用单声道开发可以正常工作,但每当我切换回统一时,它似乎会从解决方案中删除引用。

有没有办法阻止团结这样做?

谢谢,

【问题讨论】:

    标签: unity3d unity5


    【解决方案1】:

    Unity 重建(即,删除现有文件并从头开始重新构建)MyProject.sln 文件,只要它从 ~/Assets 文件夹中找到更改。因此,每次 Unity 编译时,您或在 Unity 的自动化进程之外对 MyProject.sln 所做的任何手动修改都将被丢弃。

    正如@Kamalen 提到的,导入external 项目的常用方法是让外部项目成为库项目,从中构建*.dll,然后将*.dll 文件放在下面的某个位置~/Assets。当~/Assets 下有*.dll 文件时,您可以从~/Assets 下的任何代码中引用库文件中定义的类和方法。

    但是,您似乎可以访问源代码,并且倾向于经常从您的评论中修改外部项目。

    在这种情况下,您可以考虑将外部项目的源代码放在~/Assets 下。文件夹结构如下所示:

    MyProject/
    MyProject/MyProject.sln  // this is rebuilt again each time by Unity
    MyProject/Assets/
    MyProject/Assets/ExternalProject/...  // This could be a git submodule
    MyProject/Assets/scripts/...
    

    您当然可以让ExternalProject 成为一个 git 子模块,并将其作为一个单独的 git 存储库进行维护。然后,您可以从 Untiy 文件夹中更改 ExternalProject,或者更改 ExternalProject 的原始位置,然后从 git 拉取 Unity 文件夹下的 ExternalProject

    根据经验,如果您知道库是完整的并且库项目不太可能发生更改(包括您无权访问其源代码的情况),请导入 *.dll 文件。当项目中存在 *.dll 文件时,通常会假设该库是完整的、不太可能更改且不受我们控制,因此它被称为 external项目。

    【讨论】:

    • 感谢 Matthias,在谈论我自己编写的一段代码时,可能不应该使用“外部”一词。是的,我可以访问该项目的源代码,因为它是我的。它是我的 3 层应用程序的中间层,因此是共享层,统一是客户端。此编码在客户端(统一)和服务器之间共享。我已经设计了一个 wpf 客户端,并且共享(通用)代码被简单地添加到客户端解决方案中。因此,我感到惊讶的原因是很难将来自外部项目的代码添加到统一中。
    • 我试过这个并遇到了一些问题。我知道已经 1.5 年了,所以事情可能已经改变,但我还是想发表评论。在我的外部项目中,一些项目引用了其他项目。这导致unity抱怨有两个相同的dll。看起来它直接从 bin 文件夹中提取 dll。最重要的是,它不喜欢 AssemblyInfo 中的任何内容。该问题的最简单解决方案是去掉 AssemblyInfo,或者将它们包含在 #if 块中。在相关说明中,Jetbrains Rider 能够毫无问题地进入 dll。我无法让 VS 做到这一点。
    • @Nikhil 是的,时间已经过去,我可能需要仔细检查,但是...您是否确保您的外部 dll 文件具有唯一的文件名并且不同于 Unity 将创建的默认 dll 文件?生成 dll 后,将它们放在 Assets 文件夹下的任何位置。编译后,您应该能够从 Unity 项目中的任何源代码中访问 dll 的类,并在命名空间中使用正确的 using 语句。
    • 是的,名称是唯一的。您是说我应该将所有外部项目的输出目录更改为同一目录吗?喜欢资产/库/?
    【解决方案2】:

    将外部项目引入 Unity 的最佳方式是……不要直接拥有外部项目。 Unity 会定期重建解决方案文件,几乎就像一个临时文件。

    您可以做的是将您的外部项目配置为库项目,并将该项目(或外部工具)配置为在 Assets 文件夹的任何子文件夹中输出生成的 DLL。

    如果您的外部项目使用 Unity 类,则需要引用位于文件夹中的 UnityEngine.dll 和 UnityEditor.dll:

    • Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll for Mac
    • Program Files\Unity\Editor\Data\Managed\UnityEngine.dll for Windows

    【讨论】:

    • 谢谢,一点都不理想 :( 每当我想修改外部项目时,我都需要重新构建它。确实不理想!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多