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…