如何将公共代码移动到外部程序集以在Unity 3d项目中使用?

时间:2016-01-03 14:32:39

标签: visual-studio unity3d architecture code-design

问题:我必须在Unity中的多个项目之间共享一些代码。在项目工作期间,此代码不断变化。所以我需要将我的代码作为单独的程序集共享,并包含在Visual Studio 2015中的每个Unity灵魂中。

问题:在公共程序集中进行更改的方式是什么,以便为其他项目和Unity编辑器自动更新?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

项目B正在使用实用程序子模块并进行拉动,您的修改不会改变项目B的其余部分。显然,这包括版本控制提供的所有麻烦,即如果项目B处理实用程序的冲突如果你改变实用程序的实现等等,可能会中断其他项目(尽管如此)。

另一方面,这是一种通过独立项目传递公共代码的简便方法。

答案 1 :(得分:0)

让我说我的共享项目在这里: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 post-build事件命令行可以帮助解决这个问题。右键单击CSharp项目并选择属性,然后转到Build Events选项卡并将以下行添加到post-build event命令行中:

    xcopy $(ProjectDir).. \ DesignPatterns \ bin \ $(ConfigurationName)\ DesignPatterns.dll" " $(PROJECTDIR)\资产\ ExternalDLLs \ DesignPatterns.dll" / Y

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

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