Bootstrap

从零开始创建Unity自定义包Package:一步一步实现您的功能

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

从零开始创建Unity自定义包Package:一步一步实现您的功能
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 Package 自定义包的实现

为初学者节省宝贵的学习时间,避免困惑!


前言:

  在Unity中,自定义包(Package)是一种出色的方法,可以将代码、资源和功能打包,方便地在不同项目之间共享和分发。本篇博客将逐步学习如何从零开始创建一个自定义的Unity包,以满足开发需求。

TechX 教程效果:

在这里插入图片描述



1、UPM(Unity Package Manager)和包(Package)

1、Package Manager(包管理器)


Unity Package Manager是Unity官方提供的一套工具,用于管理Unity项目中的各种包。它具有以下功能:

1、分发和更新功能:Package Manager可以快速、轻松地分发和更新Unity项目中的功能、工具和资源。

2、共享可重用组件:可以使用Package Manager来发现、共享和使用可重用的组件,这些组件可以加速开发过程。

3、项目依赖关系:Package Manager能够定义项目之间的依赖关系,解决依赖关系并下载必要的包,以确保项目能够正确运行。

4、可扩展性:通过使用Package Manager,可以将Unity扩展为一个可扩展的开放平台,允许开发人员共享他们的创意和解决方案。

5、集成到项目中:可以使用Package Manager轻松地将包的内容集成到项目中,而无需手动管理文件。


在这里插入图片描述

2、Package(包)


在Unity中,一个包(Package)是一组代码、资源和功能的集合,可以作为单元被添加到项目中。包可以包含以下内容:

1、C#脚本和程序集:可以将自己的C#脚本和程序集添加到包中,以便在项目中使用。

2、原生插件:如果需要使用原生代码(如C++)与Unity交互,可以将原生插件添加到包中。

3、模型、纹理、动画和音频剪辑等资源:可以将任何类型的资源添加到包中,以供项目使用。

4、包清单文件:每个包都包含一个包清单文件,其中包含有关包的信息,如名称、版本、依赖关系和存储库URL。

5、测试:为确保包在不同情况下都能按预期工作,可以编写测试并将其添加到包中。

6、CHANGELOG.md文件:在每次发布新版本时更新CHANGELOG.md文件,以记录新增功能和错误修复。



2、创建Package包的要求

1、包清单文件(package.json)


每个Unity Package都必须包含一个名为package.json的清单文件。这个文件包含了有关包的元信息,如名称、版本、依赖项等。以下是一些package.json中的常见字段:

  • name:包的名称,必须是小写字母且不含空格。
  • displayName:包的展示名称
  • version:包的版本号。
  • unity:指定此包适用的Unity版本。
  • unityRelease:Unity的发布版本。
  • description:包的描述。
  • keywords:包的关键词。
  • author:包的作者。
  • dependencies:包的依赖项,指定其他包的版本。
  • samples:包的示例。
  • documentationUrl:包的说明文档。
{
    "name": "com.companyname.packagename",
    "displayName": "Package Name",
    "version": "0.0.1-prerelease",
    "unity": "2018.3",
    "unityRelease": "0f1",
    "description": "This is Test Package",
    "keywords": ["Test","Package"],
    "author": "TechX",
    "dependencies":["com.unity.nuget.newtonsoft-json": "2.0.0"],
    "samples": [
	    {
	      "displayName": "Cinemachine Example Scenes",
	      "description": "Sample scenes illustrating various ways to use Cinemachine",
	      "path": "Samples~/Cinemachine Example Scenes"
	    }
  	],
  	"documentationUrl": "https://docs.unity3d.com/Packages/[email protected]/manual/index.html",
}

2、文件结构:


包的文件结构应该遵循Unity Package的布局约定。这将确保包可以正确导入到其他项目中,并且可以在Unity Package Manager中正常工作。

在这里插入图片描述

创建Unity Package时,包的文件结构布局非常重要,它决定了包在导入到其他项目中时的组织和使用方式。以下是一个典型的Unity Package的文件结构布局详细说明:

1.、包根目录:

  • Unity Package的所有文件和文件夹都会位于一个根目录下。这个根目录的名称通常是包的名称,用小写字母表示,不包含空格。

2、package.json:

  • 这是包的清单文件,包含有关包的元信息,如名称、版本、依赖项等。它必须位于包的根目录下。

3、Documentation文件夹(可选):

-这是包的说明文件夹Documentation,可以在其中添加Markdown或HTML文件,以便其他开发者了解如何使用包。

4、Editor文件夹(可选):

  • 如果包包含一些只在编辑器中使用的功能,可以创建一个名为Editor的文件夹。在这里放置的脚本将只在Unity编辑器环境中执行。

5、Runtime文件夹(可选):

  • 如果包包含在游戏运行时使用的功能,可以创建一个名为Runtime的文件夹。这里的脚本将在游戏运行时执行。

6、scripts文件夹(可选):

  • 如果包包含一些通用的C#脚本,可以创建一个名为Scripts的文件夹,并将脚本放置在其中。这可以帮助更好地组织代码。

7、Resources文件夹(可选):

  • 如果包包含一些资源文件,如纹理、模型、声音等,可以创建一个名为Resources的文件夹,并将资源文件放置在其中。这些资源可以通过Resources.Load函数在运行时加载。

8、Prefabs文件夹(可选):

  • 如果包包含一些预制体,可以创建一个名为Prefabs的文件夹,并将预制体放置在其中。

9、Scenes文件夹(可选):

  • 如果包包含一些场景文件,可以创建一个名为Scenes的文件夹,并将场景文件放置在其中。

10、Editor Default Resources文件夹(可选):

  • 如果包包含在编辑器中使用的资源,例如图标、样式等,可以创建一个名为Editor Default Resources的文件夹,并将资源放置在其中。

11、Tests文件夹(可选):

  • 如果为包编写了测试,可以创建一个名为Tests的文件夹,并将测试相关的文件和脚本放置在其中。Tests/Editor用于编辑器测试,Tests/Runtime用于运行时测试。

12、Examples文件夹(可选):

  • 如果为其他开发者提供使用示例,可以创建一个名为Examples的文件夹,并在其中添加演示场景、脚本和资源。

3、CHANGELOG.md文件


为了方便用户了解每个版本的变化,建议在每次发布新版本时更新CHANGELOG.md文件。在文件中记录新增功能、改进和错误修复。

4、合适的命名

给包起一个合适的名称,这将有助于其他开发者理解包的用途和内容。名称应该简洁明了,能够表达出包的主要功能或特点。

5、版本管理

在package.json中正确管理您的包的版本号。每次对包进行更改或添加新功能时,都应该适当地更新版本号,以便其他开发者可以知道何时有新的更新可用。

6、文档

为包编写文档,包括如何安装、如何使用以及包含的功能和资源的说明。好的文档可以帮助其他开发者更容易地使用您的包。



3、创建Package包

1 、Embeded Package


Embeded Package 嵌入式包是直接在Unity项目中创建的包,以子文件夹的形式存在于项目的Packages目录下。以下是嵌入式包的具体步骤:

1、在工程文件的Packages文件夹下创建一个文件夹作为包的根目录,文件夹的名称为包的展示名称(不是包的名称),假设包的展示名称为Test Package。
在这里插入图片描述

2、在包的根目录下创建 package.json 文件
在这里插入图片描述

3、填写 package.json 的信息

{
    "name": "com.techx.testpackage",   		//包名称全部小写
    "displayName": "Test Package",     		//包的展示名
    "version": "0.0.1",                		//包的版本号
    "unity": "2018.3",                 		//Unity版本
    "unityRelease": "0f1",					//Unity发布版本
    "description": "This is Test Package",  //包的描述
    "keywords": ["Test","Package"],         //包的关键词
    "author": "TechX",                      //包的作者
    "dependencies":[],                      //包的依赖
    "samples": [],                          //包的示例
}

2 、Local Package


本地路径包是指您在计算机上任意位置创建的包,然后在其他项目的 manifest.json 文件中指定包的本地文件路径就可以了。

鉴于创建包的时候需要Unity的工程项目,我们首先在Unity项目中开发包,在包开发完成后把文件夹拖出放到指定的存储位置;

本地包和嵌入式包的创建方式是一样的,只是位置不同和加载包的方式不同而已。




4、开发Package包


确保包的文件结构布局符合Unity的包布局约定。根据需要,创建适当的文件夹(如Editor、Runtime、Tests、等)来组织您的资源和脚本。

在这里插入图片描述

  • Editor文件夹:

  1、包含一些只在编辑器中使用的功能,在这里放置的脚本将只在Unity编辑器环境中执行

  2、在Editor文件添加Unity.TestPackage.Editor.asmdef文件

  • Runtime文件夹:

  1、包含在游戏运行时使用的功能,这里的脚本将在游戏运行时执行。

  2、在Editor文件添加Unity.TestPackage.asmdef文件

  • Tests文件夹:

  1、如果为包编写了测试,将测试相关的文件和脚本放置在其中。Tests/Editor用于编辑器测试,Tests/Runtime用于运行时测试。

  2、在Tests/Editor文件添加Unity.TestPackage.Editor.Tests.asmdef文件

  3、在Tests/Runtime文件添加Unity.TestPackage.Tests.asmdef文件

  • Examples文件夹:如果为其他开发者提供使用示例,在其中添加演示场景、脚本和资源

在这里插入图片描述



5、更新CHANGELOG.md


在包根目录下创建一个名为CHANGELOG.md的文件,用于记录每个新版本的变更、新功能和错误修复。

在这里插入图片描述


6、引入Package包


在工程中引入本地包的方式:

  • 修改manifest.json文件

    1、打开工程Packages文件夹中的manifest.json文件。

    2、将包的路径添加到manifest.json文件中。

{
  "dependencies": {
    "com.techx.testpackage": "file:../UPM/Test Package",
    }
}
  • 通过Unity Package Manager添加包

    1、在Unity的主菜单栏中依次点Window > Package Manager打开包管理器。

    2、点击包管理器左上角的+号,选择Add package from disk...选择包。

在这里插入图片描述


7、快速创建package包


看到最后的小伙伴们有福了,虽然上面的文章很详细的讲的很详细了,但是对于有的小伙伴来说创建一个包还是觉得有困难或者觉得很麻烦,最新我新开发了一个包,可以一键去生成自定义package包,简单又快捷,伙伴们快用起来吧。

项目地址:

https://blog.csdn.net/caiprogram123/article/details/144102042



TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END

感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。

如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。

在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

;