【问题标题】:How can I move common code into external assembly to be used in Unity 3d projects?如何将通用代码移动到外部程序集中以在 Unity 3d 项目中使用?
【发布时间】:2016-01-03 14:32:39
【问题描述】:

我必须在 Unity 中的多个项目之间共享一些代码。此代码在项目工作期间不断变化。因此,我需要将我的代码作为单独的程序集共享,并包含在 Visual Studio 2015 的每个 Unity 解决方案中。

在通用程序集中进行更改以使其为其他项目和 Unity 编辑器自动更新的方法是什么?

【问题讨论】:

    标签: visual-studio unity3d architecture


    【解决方案1】:

    您的解决方案是在带有版本控制的子模块中。您有一个主要项目的仓库。然后你有一个文件夹,里面是另一个仓库。这是一个子模块。它在您的主仓库中显示为灰色,并且不会提交。

    https://git-scm.com/book/en/v2/Git-Tools-Submodules

    它确实适用于其他版本控制系统。

    该模式的重点是您使用实用程序子模块处理项目 A。实用程序是 Assets 文件夹中的一个文件夹。然后修改 Utility.cs 并将其推送到 Utility repo。

    项目 B 正在使用实用程序子模块并进行拉取,您的修改就在那里,而不会改变项目 B 的其余部分。显然,这包括版本控制提供的所有麻烦,也就是说,如果项目 B 在实用程序上工作,就会发生冲突,如果您更改实用程序的实现等,其他项目可能会中断(虽然没什么不寻常的)。

    另一方面,这是一种将通用代码传递给独立项目的简单方法。

    【讨论】:

    • 这是一个很好的模式作为我的解决方案的演变。假设我们根本没有源代码控制?或者使用不同的 CVS。此外,我的主要问题是避免拉/推、构建、复制等。我只想在我的代码以及共享代码中进行更改,重建解决方案并切换回 Unity,以便我在两个程序集中的更改准备好运行在编辑器中。
    • 您描述的模式可能适用于小型项目。但是考虑一个框架,每个构建都必须在晚上自动化,这样它就可以在早上准备好并且不会花费太多时间。对于一个小团队来说,可能会更加复杂。
    • 这是真的,但就像我说的子模块将是很好的评估。主要需要进行新的代码更改。在一些里程碑之后,此代码将被推送并与 repo 同步,因此我看不到我的解决方案没有任何问题。或者你看到了可以改变的东西?
    • 哦,我们还可以使用nuget包作为进一步的解决方案评估
    【解决方案2】:

    假设我在这里有我的共享项目:c:\UnityProjects\DesignPatterns\ 并需要在此处包含在我的 Unity 项目中:c:\UnityProjects\Game\

    解决方案:

    1. 将所有共享代码移动到单独的项目中 (c:\UnityProjects\DesignPatterns)
    2. 将此项目包含在所有 Unity 项目的解决方案中。这使您可以在需要时进行更改,而无需单独重新打开共享项目。
    3. 此时一切正常,除了 Unity 编辑器看不到您的外部程序集。您必须将其复制到 Unity 中的任何资产文件夹中。 Unity 会自动检测并创建 .meta 文件。让我们为此创建文件夹:c:\UnityProjects\Game\Assets\ExternalDLLs\
    4. 我们不想将最近构建的程序集复制到此目录中,我们希望自动生成它。 Visual Studio 构建后事件命令行可帮助解决此问题。右键单击 CSharp 项目并选择属性,然后转到构建事件选项卡并将以下行添加到构建后事件命令行中:

      xcopy $(ProjectDir)..\DesignPatterns\bin\$(ConfigurationName)\DesignPatterns.dll" "$(ProjectDir)\Assets\ExternalDLLs\DesignPatterns.dll" /Y

    现在,每次我们构建解决方案时,此命令都会将我们的 dll 从共享项目的输出文件夹复制到我们项目的资产文件夹中。

    请注意:必须在构建统一代码程序集之前构建共享项目。当您总是构建解决方案时就是这种情况。在其他情况下,请考虑从 Unity 临时目录复制程序集(您可以选择此文件夹的宏)。

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2015-12-13
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      相关资源
      最近更新 更多