unity工程包怎么上传git_【教程】开发Unity PackageManager 插件包

在本文笔者将带大家走完 UPM(Unity PackageManager) 插件包的开发流程,在本文你将学会 UPM 插件包的正确构建与调试流程、GitHub发布、插件更新与下载使用。从此Github 将是你的超级在线插件包~

153841d65846

Tips :Unity 2018.3 及之后版本, Unity Package Manager (UPM) 已经支持 Git 了.

https://forum.unity.com/threads/git-support-on-package-manager.573673/

这个更新使得我们能够快速的安装那些托管在诸如 GitHub,Gitlab,Gitblit 等代码托管服务上的插件包。

这样,只要给个git链接就能安装插件/更新插件了,并且这个工作流可以让插件的开发和维护与用户工程的开发文件完全隔离,做到不污染用户工程又能将插件用于实际开发中,UPM 提供的这种便利在不远的将来将是 Unity developer 的一场狂欢,并且这一天并不遥远。

言归正传,下面我们创建一个 UPM 插件包吧~

本教程中,我们将开发一个名为 “RotateMe” 的插件包,它包含一些用于驱动游戏对象旋转的组件。

本文不涉及远程仓库的创建以及Git 安装

简要步骤

像往常那样开发。

添加 asmdef 文件

添加 package.json 和必要文档

执行"git subtree split" 和tag命令

分支策略

在本教程,我们使用 2 个分支来开发这个插件包。看个人喜好,如有必要可以增加分支(比如:develop 分支)。

master 分支: 插件包开发环境,也就是一个正常的Unity工程。

upm 分支: 插件包发布的分支,也是供 UMP 读取和安装的分支。

请注意,不能直接往 upm 分支提交,也不要使用 git branch upm 的方式手动创建此分支。

目录结构

UPM包的公共目录结构如下:

153841d65846

将上述插件包资源使用一个根节点统筹之,这个文件夹建议以插件名来命名,如下:

153841d65846

怎么样,是不是就像往常开发那样的流程呢?

开发插件包的过程无不透露着熟悉的味道哈。

开发插件包

OK,现在我们在 "master" 分支中开发并调试我们的插件。

首先撰写一个用于驱动物体旋转的示例代码并放在这个文件夹下:

Assets/RotateMe/Scripts/RotateMe.cs

示例代码如下:

using UnityEngine;

public class RotateMe : MonoBehaviour

{

public float angularVelocity = 10;

void Update ()

{

var rot = Quaternion.AngleAxis (angularVelocity * Time.deltaTime, Vector3.up);

transform.localRotation = rot * transform.localRotation;

}

}

当然,别忘了添加一个 Demo 场景。

要知道 Demo 场景可是一个可交互的手册呢,有了它用户就可以轻松的掌握怎么使用插件咯!

153841d65846

添加 asmdef 文件

这个 asmdef 文件能将它所在的文件夹及其子文件夹的脚本打到一个独立的程序集中,表象上就是这些个脚本打到了独立的 dll 中了。

简单的说下 asmdef 文件的优势.

更短的编译时间

把"internal"访问修饰符用到了极致(要知道以往的源代码插件,因为与用户脚本编译在了同一个程序集,所以它的 Internal 修饰符并没起到应有的作用,暴露了太多,就是一个掩耳盗铃的迪米特法则罢)

允许使用 unsafe code

.dll 文件可以指定特定的程序集引用。

如下图,如果你勾选了 "Test Assembly",程序集只在编辑器下生效而不会出现在打包的程序中。

153841d65846

搬运的原教程中没有涉及到到 AssemblyDefinition 的相互引用关系,笔者在这里补充下:

建议使用Editor 文件夹汇总所有的编辑器脚本,而将运行时的脚本使用 Runtime 文件夹汇总,参考 TextMeshPro 插件包的结构:

153841d65846

在Editor 和 Runtime 文件夹下各自创建一个 AssemblyDefinition 。

Editor 文件夹下的 AssemblyDefinition 中 Platform 只能选择 Editor,并且 Reference 必须添加上 Runtime 中的那个 AssemblyDefiniion ,依旧参考 TextMeshPro :

153841d65846

添加文档

UPM 插件包需要一个 package.json 包体描述文件,保存在如下路径:"Assets/RotateMe/package.json".(插件根节点)

{

"name": "com.coffee.rotate-me",

"displayName": "Rotate Me",

"description": "Rotate the object!",

"version": "1.0.0",

"unity": "2018.3",

"license": "MIT",

"dependencies": {

}

}

README.md, CHANGELOG.md, LICENSE.md 都可选但可以给用户带来更多信息。

将这些文档放在"Assets/RotateMe" 文件夹.

当然也可以放在"Assets/RotateMe/Document~",需要注意的是文件夹名称以~结尾不会显示在Project窗口

完成开发

完成了上面的几步,我们的插件包就算是完成啦。

最终 "master" 分组看起来就像这样:

153841d65846

(如果你暂时不考虑 UPM ,可将这个文件夹导出成 unitypackage 发布)

发布UPM包

153841d65846

如果想要发布 UPM 包,我们必须通过如下git 命令把插件包所在的文件夹创建为 subtree。

git subtree split --prefix=Assets/RotateMe --branch upm

这个命令将 "Assets/RotateMe" 目录放到“ upm” 分支。

通过这一步其他目录及文件不会出现在 upm 分支中。

接下来,为这个分支添加一个 tag 并推到远端。

推荐使用 semver作为 tag 的命名规则。

git tag 1.0.0 upm

git push origin upm --tags

大功告成!

这样,我们的 “RotateMe” UPM包就发布好了!

最终,分支图像这样子:

153841d65846

安装 UPM 包

现在,我们试试把 RotateMe 使用 UPM 安装到其他工程中。

找到 "Packages/manifest.json" 插入如下一行:

{

"dependencies": {

"com.coffee.rotate-me": "https://github.com/mob-sakai/RotateMe.git#1.0.0",

...

},

}

回到编辑器 Unity 就能自动加载咱们的插件啦,就像这样:

153841d65846

153841d65846

版本更新

在 "master" 分支开发和调试然后在 package.json 更新版本信息

执行 "git subtree split"

添加 tag 然后 push。

如此简单~

你也可以把已经存在的仓库使用同样的操作将其适配 UPM 。

总结

仅需几步,就能将 git 仓库直接变得支持 UPM。

如果 Github 上的Unity 工程都支持 UPM 那会有多棒!?

现在,就把你工程的 UPM 支持搞起来吧~

2020.3.4补充:

使用 file 协议,形如: "com.bshsf.commoncode":"file:../../Common",可以将UnityPackage包放在本地,这样多个工程就可以使用一个公共代码,也方便同步修改,比如在socket通信的客户端与服务端使用这种方式同步消息数据结- 来自笔者的示例。

file 协议中,默认的根节点文件夹是工程目录下与Assets 文件夹同级的 Packages 文件夹,也就是说如果你的Pacakge路径写成 file:Common ,那你的插件包请放在Packages文件夹下。

一般来说,我们会把插件包放在工程之外,方便其他工程引用,可以使用2个"../" 往上走2个目录层级,比如"com.bshsf.commoncode":"file:../../Common" 表示这个插件包是跟工程根目录同级的了。

如果你安装了git 并设置了git的 Path环境变量,但是Unity还是报相关错误,这可能是因为你的环境变量路径没有指定正确,64位Windows 10 我给的参考路径是:"C:\Program Files\Git\mingw64\libexec\git-core" ,非默认安装路径的自行合理拼接 。

2020年10月26日 更新

在新版的Unity中(笔者使用的是Unity 2019.4.12),PackageManager 支持直接输入 git 链接了,这样带来两个好处:

不需要手动改 package.json

依旧支持打tag 做插件包的更新哦!

153841d65846

扩展阅读


版权声明:本文为weixin_42165712原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。