【发布时间】:2016-01-03 14:32:39
【问题描述】:
我必须在 Unity 中的多个项目之间共享一些代码。此代码在项目工作期间不断变化。因此,我需要将我的代码作为单独的程序集共享,并包含在 Visual Studio 2015 的每个 Unity 解决方案中。
在通用程序集中进行更改以使其为其他项目和 Unity 编辑器自动更新的方法是什么?
【问题讨论】:
标签: visual-studio unity3d architecture
我必须在 Unity 中的多个项目之间共享一些代码。此代码在项目工作期间不断变化。因此,我需要将我的代码作为单独的程序集共享,并包含在 Visual Studio 2015 的每个 Unity 解决方案中。
在通用程序集中进行更改以使其为其他项目和 Unity 编辑器自动更新的方法是什么?
【问题讨论】:
标签: visual-studio unity3d architecture
您的解决方案是在带有版本控制的子模块中。您有一个主要项目的仓库。然后你有一个文件夹,里面是另一个仓库。这是一个子模块。它在您的主仓库中显示为灰色,并且不会提交。
https://git-scm.com/book/en/v2/Git-Tools-Submodules
它确实适用于其他版本控制系统。
该模式的重点是您使用实用程序子模块处理项目 A。实用程序是 Assets 文件夹中的一个文件夹。然后修改 Utility.cs 并将其推送到 Utility repo。
项目 B 正在使用实用程序子模块并进行拉取,您的修改就在那里,而不会改变项目 B 的其余部分。显然,这包括版本控制提供的所有麻烦,也就是说,如果项目 B 在实用程序上工作,就会发生冲突,如果您更改实用程序的实现等,其他项目可能会中断(虽然没什么不寻常的)。
另一方面,这是一种将通用代码传递给独立项目的简单方法。
【讨论】:
假设我在这里有我的共享项目:c:\UnityProjects\DesignPatterns\ 并需要在此处包含在我的 Unity 项目中:c:\UnityProjects\Game\
解决方案:
我们不想将最近构建的程序集复制到此目录中,我们希望自动生成它。 Visual Studio 构建后事件命令行可帮助解决此问题。右键单击 CSharp 项目并选择属性,然后转到构建事件选项卡并将以下行添加到构建后事件命令行中:
xcopy $(ProjectDir)..\DesignPatterns\bin\$(ConfigurationName)\DesignPatterns.dll" "$(ProjectDir)\Assets\ExternalDLLs\DesignPatterns.dll" /Y
现在,每次我们构建解决方案时,此命令都会将我们的 dll 从共享项目的输出文件夹复制到我们项目的资产文件夹中。
请注意:必须在构建统一代码程序集之前构建共享项目。当您总是构建解决方案时就是这种情况。在其他情况下,请考虑从 Unity 临时目录复制程序集(您可以选择此文件夹的宏)。
【讨论】: