如何将独立Git仓库的库作为子模块接入Unity项目并支持本地修改
我来给你几个实用的方案,完美解决你这个既要整合独立Git类库又能实时修改的需求——毕竟Unity自动生成.sln和.csproj的特性确实挺让人头疼的:
方案一:Git子模块 + Unity Assembly Definition(推荐)
这个方案既能保持类库的独立Git仓库,又能让Unity直接识别类库代码,支持实时修改和编译:
添加Git子模块
在你的Unity项目根目录打开终端,执行以下命令,把独立类库作为子模块添加到Unity项目的Assets目录下(放在Assets下更方便Unity识别):git submodule add <你的类库Git仓库地址> Assets/ExternalLibraries/YourLibrary这样你的Unity项目会保留对类库仓库的引用,类库代码会同步到指定路径,同时你依然可以在类库目录里提交/拉取独立的Git变更。
创建Assembly Definition文件
- 打开Unity编辑器,找到刚才添加的类库文件夹,右键选择
Create > Assembly Definition。 - 给这个.asmdef文件命名(比如
YourLibrary),在Inspector面板里设置适用的平台(比如Editor、Standalone等),确保不要勾选"Override References",除非你有特殊的引用需求。 - 找到你Unity项目中游戏代码的.asmdef文件(如果没有就创建一个),在它的Inspector面板的"References"列表里,添加刚才创建的
YourLibraryasmdef。
这样Unity自动生成的.sln和.csproj会自动包含这个类库的代码,你修改类库代码后,Unity会自动重新编译,完全不用手动处理项目文件。
- 打开Unity编辑器,找到刚才添加的类库文件夹,右键选择
克隆项目的注意事项
如果其他人克隆你的Unity项目,需要执行以下命令来拉取子模块的代码:git clone --recursive <你的Unity项目Git地址> # 或者如果已经克隆了项目,执行: git submodule update --init --recursive
方案二:符号链接 + Assembly Definition(本地类库适用)
如果你的类库是本地的,不想用Git子模块,可以用符号链接把类库目录映射到Unity项目里:
创建符号链接
- Windows:打开命令提示符(管理员权限),执行:
mklink /D "D:/Path/To/Unity/Project/Assets/ExternalLibraries/YourLibrary" "D:/Path/To/Your/Independent/Library" - Mac/Linux:打开终端,执行:
ln -s "/Path/To/Your/Independent/Library" "/Path/To/Unity/Project/Assets/ExternalLibraries/YourLibrary"
- Windows:打开命令提示符(管理员权限),执行:
添加Assembly Definition文件
和方案一的步骤2完全一致,创建asmdef并引用,Unity就会识别符号链接里的类库代码,修改类库本地文件后,Unity会实时同步编译。
备选方案:自动编译DLL到Plugins文件夹
如果你确实需要用DLL的方式(比如类库有特殊编译需求),可以设置自动编译脚本,把类库编译后的DLL自动复制到Unity的Plugins文件夹:
设置类库编译输出路径
在类库的.csproj文件里,设置OutputPath为Unity项目的Plugins文件夹:<PropertyGroup> <OutputPath>../UnityProject/Assets/Plugins/</OutputPath> </PropertyGroup>添加自动编译脚本
可以写一个简单的批处理(Windows)或Shell脚本(Mac/Linux),每次修改类库后执行编译:# Mac/Linux msbuild YourLibrary.csproj /t:Build /p:Configuration=Release:: Windows msbuild YourLibrary.csproj /t:Build /p:Configuration=Release也可以在IDE(比如VS)里设置编译后事件,自动复制DLL到Plugins文件夹。
内容的提问来源于stack exchange,提问作者Raphael Schmitz

