Unity自定义PackageManager服务器
前言
这里是前言介绍。
正文
本文会实现以下几个需求
搭建自己的PackageManager服务器
安装nodejs
安装npm
部署verdaccio
将自己写的插件发布到PackageManager服务器上
配置自己的Package
注册 Verdaccio 服务器账号
登陆 Verdaccio 服务器
发布 Package 到 Verdaccio 服务器上
让项目可以使用Verdaccio服务器上的所有Package
修改项目的manifest.json
修改Unity编辑器的项目模板,让每个新建的Unity项目都可安装自己服务器上的插件
修改Unity编辑器项目模板的mainfest.json
使用peazip重新压缩为.tgz文件
本文需要用到的工具
- Unity Editor
- 云服务器
- Windows PowerShell
- PeaZip
参考文章:
https://medium.com/@markushofer/run-your-own-unity-package-server-b4fe9995704e
一、云服务器部署
购买服务器
你可以选择阿里云,腾讯云,谷歌云等产品,本文使用腾讯云的轻量级服务器。
理论上只要是Linux的系统就可以。

系统镜像为Ubuntu


登陆云服务器
自行购买好服务器之后进入控制台界面,大部分厂商的服务器都是可以直接在网页上远程登陆的。点击登陆

切换到root
进入控制台之后输入 sudo -i 获取root权限

安装Verdaccio
Verdaccio是一个开源的npm私服,我们后续的package都是发布在这上面的

在安装verdaccio之前需要先安装nodejs和npm
使用以下代码安装
1 | curl -sL https://deb.nodesource.com/setup_11.x | bash - |
成功之后的输出

使用以下代码验证是否安装成功
1 | nodejs -v |
正常输出了版本号则说明安装成功

确保nodejs和npm安装成功之后我们来安装verdaccio
1 | npm install --global verdaccio |
安装成功

配置Verdaccio
然后我们需要运行verdaccio,在普通用户权限下运行即可
按Ctrl D退出root权限
输入verdaccio运行
1 | verdaccio |
成功运行显示下图,记住config file的路径,下一步需要用到
我这里是 /home/lighthouse/verdaccio/config.yaml

按Ctrl Z退出verdaccio

这里使用vim + 上面记住的路径,编辑配置文件
1 | vim /home/lighthouse/verdaccio/config.yaml |

到这个界面之后按 i ,然后在plugins下插入下面两行代码
4873是端口,可以自行定义,之后就使用ip+这个端口访问verdaccio界面

按Esc退出Insert
输入 :wq 并回车保存并退出vim


这时候需要回到控制台,打开防火墙,添加你刚才设置的端口


重新登陆到控制台,运行verdaccio

这时候你就可以打开浏览器,输入ip加端口访问 verdaccio 了

控制台这边也会有log输出

但是这样还有一个弊端,我们需要verdaccio一直运行,但是现在关掉控制台之后,它也会跟着关闭,我们也无法通过端口访问了

我们需要使用一个叫screen的小工具来让verdaccio一直运行在服务器上
登陆服务器输入 screen,

如果没有安装,则输入以下代码进行安装
1 | sudo apt-get install screen |
输入之后会显示该界面,再按一下回车

然后就进入到了screen的控制台,输入verdaccio回车

按 Ctrl A+D退出
大功告成,现在关闭控制台之后,你还可以通过端口访问

二、将自己的插件发布到服务器上面
首先你需要准备好你的插件包
你可以参考Package下面这些Unity自带的包格式

这里用我自己写的UI框架举例

有几个要点:
- package以文件夹的形式管理
- 脚本建议按照Editor和Runtime进行分类
- package里所有的脚本都需要有一个程序集定义文件Assembly Definition
- 程序集之间的引用关系必须正确
- 根目录必须要有一个package.json文件
为脚本创建程序集定义文件
我这个项目是比较简单的结构,就只需要给Editor和Runtime两个文件夹的脚本添加
关于程序集定义文件的详细介绍请看官方手册:
在文件夹下右键创建一个Assembly Definition文件,这个文件会自动将跟它同级以及同级文件夹内的脚本定义为一个程序集
这里我在Runtime文件夹下新建


然后我在Editor文件夹下新建
这里主要注意平台和引用
- 因为Editor的脚本应该是只在编辑器下生效的,所以我们需要将平台改为只勾选Editor,否则有可能在打包时出错

- 一些Editor的脚本会引用Runtime的脚本,所以需要对Editor的程序集定义文件引用Runtime的程序集定义文件

- 如果你的插件引用了其他插件,也需要添加其他插件的程序集引用
在插件根目录创建 package.json 文件

打开之后,填写包名,版本号,引用的其他package等

全部完成之后,我们的Package就准备好了,剩下就只有上传了
使用Windows PowerShell将Package上传到 verdaccio
打开PowerShell ,一般都是自带的

首先使用以下指令注册一个verdaccio账户
1 | npm adduser --registry http://ip:端口 |
会让你输入用户名密码和邮箱

注册成功

使用以下代码登陆,注册登陆一般只需一次即可,后续直接发布就行
1 | npm login --registry http://ip:端口 |
接下来cd到你的package路径

然后使用以下指令发布,每次更新都需要提升版本号,否则会失败
1 | npm publish --registry http://ip:端口 |
发布成功

然后可以在网页看到你发布的Package

三、修改项目的manifest.json文件,注册你的服务器地址
打开根目录,找到Packages文件夹下的manifest.json


在dependencies上方加入以下代码
1 | "scopedRegistries": [ |
如下图

重新回到项目,打开PackageManager,就可以找到我们发布的package了
新版本的Unity还可以在这筛选是Unity的包还是自定义服务器的包
为了方便找到我自己的包,名字前都加了一个下划线

四、修改Unity编辑器的项目模板,让每个新建的Unity项目都可安装自己服务器上的插件
上面这样依然不是很方便,我每新建一个项目,都要重新修改一下manifest.json文件,对于我这样的程序员来说,一件事情做两遍,是不能忍的。
我们通过修改Unity编辑器的项目模板来解决这个问题,这样每次新建项目的时候,就都会使用我们模板里的json文件了!
首先找到Unity编辑器的项目模板路径
如下

将我们平时常用的那个模板解压,进入解压后得到的文件夹

打开它,增加我们域注册代码

为这个模板重命名,到模板根目录,打开package.json

修改name和displayName

这时候我需要将这个package文件夹重新压缩回tgz,我常用的winrar是不行的
这里我使用PeaZip来进行压缩

右键该文件夹,添加到归档

注意红框内的几个设置
选择GZip,勾选选用TAR归档,点击确定

然后得到一个 .tar.gz 文件

对其进行重命名,将 .tar.gz 改成 .tgz ,否则Unity无法识别该模板

最后删除Package文件夹

然后需要注销或者重启电脑,才会生效

大功告成,新建项目的时候就可以看到我们的模板了

参考来源: [ Unity自定义PackageManager服务器 ]
开发Unity PackageManager 插件包
Unity:使用Package Manager开发和管理自定义插件
to be continued…