基本做法就是,按照官方推荐的方式,组织代码和资源,然后这个文件夹就可以作为一个Package使用了
官方推荐的方式是这样的:https://docs.unity3d.com/Manual/cus-layout.html。按照这个文件结构放置内容
然后在根目录加一个package.json,描述一下这个Package
官方给出的Package.json的手册:https://docs.unity3d.com/Manual/upm-manifestPkg.html,这个模板可以参考之前写过的Package:https://github.com/GZhonghui/uSceneEditor/blob/master/package.json
创建一个空项目,在Packages(Packages和Assets文件夹同级)里创建一个文件夹,文件夹命名为:com.gzher.u_scene_editor。为什么要在Unity项目中创建Package,在Unity编辑器之外不可以创建吗?[原因]这个Package里面包含C#代码,打算把这些代码放到单独的程序集定义里面,所以需要创建程序集定义(Assembly definitions)文件,所以是在Unity Editor中进行的。
在文件夹com.gzher.u_scene_editor里面创建package.json。填充package.json的内容,能填的都按照正式的流程来,这里描述了哪些是必填项:https://docs.unity3d.com/Manual/upm-manifestPkg.html。另外最好把chanagelog和授权文件、文档都写一下。
{ "name": "com.gzher.u_scene_editor", "version": "0.1.0", "displayName": "uSceneEditor", "description": "Scene Editor by Unity", "unity": "2020.3", "documentationUrl": "<https://github.com/GZhonghui/uSceneEditor>", "keywords": [], "author": { "name": "Zhonghui", "email": "mail@gzher.com", "url": "<https://www.gzher.com/>" } }
已经可以在UPM中看到这个Package。打开/Packages/packages-lock.json,可以看到我们创建的Package的信息是:
"com.gzher.u_scene_editor": { "version": "file:com.gzher.u_scene_editor", "depth": 0, "source": "embedded", "dependencies": {} },
在文件夹com.gzher.u_scene_editor里面创建子文件夹:Runtime和Editor。在Runtime和Editor中放置代码。在Runtime里面创建Assembly Definition,命名是gzher.u_scene_editor;在Editor里面创建Assembly Definition,命名是gzher.u_scene_editor.Editor。在资源管理器中,可以看到Assembly Definition的后缀名是asmdef,其文件内容也很简单:
{ "name": "gzher.u_scene_editor" }
[为什么]有的Package在/Packages里,而有的在/Library/PackageCache?[解释]在/Library/PackageCache里面的是只读的包,不需要作为工程的一部分,只需要缓存一下就行了,丢失了也可以重新下载回来,/Library是可以安全删除的文件夹;而/Packages不能删除,因为/Packages里面存储的是工程相关文件,所以不能删除的Package放在这里。
重要:为了能够在自己的Package里面,访问到Unity的库,需要添加引用关系。可以在我们刚才创建的Assembly Definition中设置引用(需要哪个程序集访问就设置哪个),见下图(设置完成之后,打开VS重新Load编译一下)
Unity官方的Package的托管方式,由Unity维护,使用起来最方便,但是我们自己创建的Package不能使用这种方式托管
将Package的内容上传到Github,使用Github的链接进行安装。关于版本控制:
The revision can be any tag, branch or commit hash. You must provide a full commit hash. Unity doesn't support shortened SHA-1 hashes. This table shows examples for specifying revisions:
直接将Package的文件夹放到/Packages下即可,或者在UPM中选择从本地文件安装Package,没有托管的需要
在/Packages/packages-lock.json中,可以看到每个Package的来源/安装信息,比如
"source": "embedded"
安装来源/方式不同,Package的文件可能也就放在不同的位置