Unity工具—制作与使用Package

本文讲解如何制作 UPM 包,并通过本地和 Git 导入项目,参考官方手册,实际项目可参考本人制作的工具包 GRUnityTools

原文地址:Unity工具—制作与使用Package

Unity Package Manager

UPM 是 Unity 提供的包管理系统,可快速便捷地下载和更新 Unity 功能,和发现与共享用户自定义组件

  1. Unity Editor 下可在 Window > Package Manager 打开 UPM 窗口并安装官方包或通过 URL 添加自定义包
  2. 在项目路径下 ./Packages/manifest.json,显示了所有依赖包名和版本,可根据格式添加自己所需的包

制作 Package

内容

Package 可包含

  • C# 脚本
  • 程序集 Assembly
  • 原生插件 Plugin
  • 模型、贴图、动画和音频等其他资产

也可添加其他信息文件

  • 修改日志 CHANGELOG.md
  • 说明文件 README.md
  • 版权声明 LICENSE.md
  • 文档 Document~ (文件夹名后加~可使工程忽略该文件夹,文档仍是 md)

另外每个包还包含一个 Package 清单,package.json,用于声明包体信息,包括名称、版本、依赖和仓库地址等

命名规范

  • 包名起始必须为com.<company-name>,例如com.unity.timeline
  • 若在 UI 显示则需低于50个字符,否则可低于214个字符
  • 仅包含小写字母、数字、连字符-、下划线_和点.
  • 为表明命名空间,可在命名空间后缀加点。如com.unity.2d.animationcom.unity.2d.ik

文件布局

官方手册推荐布局样式

<root>
  ├── package.json
  ├── README.md
  ├── CHANGELOG.md
  ├── LICENSE.md
  ├── Editor
  │   ├── Unity.[YourPackageName].Editor.asmdef
  │   └── EditorExample.cs
  ├── Runtime
  │   ├── Unity.[YourPackageName].asmdef
  │   └── RuntimeExample.cs
  ├── Tests
  │   ├── Editor
  │   │   ├── Unity.[YourPackageName].Editor.Tests.asmdef
  │   │   └── EditorExampleTest.cs
  │   └── Runtime
  │        ├── Unity.[YourPackageName].Tests.asmdef
  │        └── RuntimeExampleTest.cs
  └── Documentation~
       └── [YourPackageName].md

另外对于一个工程多个 Package 的情况,可用如下布局

<root>
  ├── Packages
        ├── YourPackageName 
        │       ├── package.json
        │       ├── README.md
        │       ├── CHANGELOG.md
        │       ├── LICENSE.md
        │       ├── Editor
        │       │       ├── Unity.[YourPackageName].Editor.asmdef
        │       │       └── EditorExample.cs
        │       ├── Runtime
        │       │       ├── Unity.[YourPackageName].asmdef
        │       │       └── RuntimeExample.cs
        │       ├── Tests
        │       │       ├── Editor
        │       │       │       ├── Unity.[YourPackageName].Editor.Tests.asmdef
        │       │       │       └── EditorExampleTest.cs
        │       │       └── Runtime
        │       │               ├── Unity.[YourPackageName].Tests.asmdef
        │       │               └── RuntimeExampleTest.cs
        │       └── Documentation~
      │             └── [YourPackageName].md
        └── YourAnotherPackage
                ├── Editor
                ├── Runtime
                ├── Tests
                └── Documentation~

Package 配置清单

每个 Package 需有一个package.json文件,用于配置 Package 信息,在 Package 导入项目后,这些信息会在 Package Manager 窗口展示出来

必要信息

  • name

    包名,依据上述命名规范

  • version

    版本号,需遵守 主版本.次版本.补丁版本 规则即 x.x.x

建议信息

下述信息并非强制,但建议添加以更易提供他人使用

  • displayName

    在编辑器中的展示名称

  • description

    简介,展示与 Package Manager 窗口中,支持 UTF-8 编码字符

  • unity

    支持 Unity 最小版本,主版本号.次版本号 如 2018.3

其他信息

  • unityRelease

    指明某些特定 Unity 发行版本

  • dependencies

    json中以键值对出现的依赖包名和版本,如"com.unity.some-package": "1.0.0"

  • keywords

    关键词数组

  • type

    内部使用类型

  • author

    作者信息,可包含name、email 和 url

{
  "name": "com.unity.example",
  "version": "1.2.3",
  "displayName": "Package Example",
  "description": "This is an example package",
  "unity": "2019.1",
  "unityRelease": "0b5",
  "dependencies": {
    "com.unity.some-package": "1.0.0",
    "com.unity.other-package": "2.0.0"
 },
 "keywords": [
    "keyword1",
    "keyword2",
    "keyword3"
  ],
  "author": {
    "name": "Unity",
    "email": "unity@example.com",
    "url": "https://www.unity3d.com"
  }
}

Assembly Definition 文件

包中的.cs脚本文件必须与程序集定义文件 .asmdef关联(在同一目录下),.asmdef等同于 .Net 生态的 C# 工程

若一程序集内代码有对其他程序集的代码的引用,则必须在.asmdef的 Inspector 中Assembly Definition References选项下添加对该程序集文件的引用

同时对于不同平台的代码,根据代码作用在.asmdef文件的Platforms选项下选定程序集运行平台

.asmdef文件命名建议依据公司.功能.平台划分,示例 :

  • Editor 平台代码:Editor/MyCompany.MyFeature.Editor.asmdef
  • Runtime 代码:Runtime/MyCompany.MyFeature.Runtime.asmdef
  • 测试代码:Tests/Editor/MyCompany.MyFeature.Editor.Tests.asmdefTests/Editor/MyCompany.MyFeature.Runtime.Tests.asmdef

发布与使用 Package

  • 提供压缩包
  • 发布到 Git,通过Package Manager 导入
  • 搭建 Package 注册服务器,使用 npm 发布

Git 发布 Package

  1. 将完整项目或单一 Package 目录上传 Git
  2. 将 Package 所在目录拆分到单独分支
  3. 为该分支打标签(打版本号)
  4. 提交远端
实际操作

假设一个项目有两个包
包目录: Assets/Packages/FirstPackageAssets/Packages/SecondPackage

# 使用 Git 命令,将第一个包拆分到分支 FirstPackage 分支,分支名可任意命名,但为他人使用方便最好与包名相同
git subtree split --prefix=Assets/Packages/FirstPackage --branch FirstPackage
# 为该分支打版本 Tag,Tag 也可自由命名,同样为方便使用,打版本号
# 因举例该项目存在两个包因此版本前加分支名作为前缀,若仅单一包可只打版本号
# 注:版本号与package.json中统一,避免混乱
git tag FirstPackage@1.0.0 FirstPackage  
# 分支和 Tag 推送远端
git push origin FirstPackage --tags 

Git 导入

  1. 在需导入的项目路径下./Packages/manifest.json文件中dependencies下添加包名和Git URL 组成的键值对,URL 后需加 # 和 Package 的分支名、标签或提交,如

    {
      "dependencies": {
        "com.company.firstpackage": "https://github.com/company/PackageSample.git#FirstPackage"
        }
    }
    
  1. 或者使用 Package Manager 窗口中的 + 按钮,Add package from git URL,直接添加上述样式的的 Git 地址

  2. 其他链接形式可参考官方手册

本地导入

MacOS 绝对地址

{
  "dependencies": {
    "com.company.firstpackage": "file:/Users/company/Assets/Packages/FirstPackage"
  }
}

Windows 绝对地址

{
  "dependencies": {
    "com.company.firstpackage": "file:C:/Users/company/Assets/Packages/FirstPackage"
  }
}

相对地址

{
  "dependencies": {
    "com.company.secondpackage": "file:../Packages/secondpackage"
  }
}

参考

https://www.jianshu.com/p/153841d65846

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342