Table of Contents

自己创建Unity Package

UPM:Unity Package Manager

之前写过的例子:https://github.com/GZhonghui/uSceneEditor


介绍

  1. Package可以包含功能、资源等等(不止是代码)
  2. Package的位置可能在/Library/PackageCache或者/Packages

如何创建

基本做法就是,按照官方推荐的方式,组织代码和资源,然后这个文件夹就可以作为一个Package使用了

组织内容

官方推荐的方式是这样的:https://docs.unity3d.com/Manual/cus-layout.html。按照这个文件结构放置内容

增加描述文件(Package manifest)

然后在根目录加一个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不能使用这种方式托管

Git

将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的文件可能也就放在不同的位置

外链资料

  1. Creating Custom Packages in Unity! (Tutorial) https://www.youtube.com/watch?v=mgsLb3TKljk (Unity官方教程)