当前位置: 首页 > news >正文

UnityPackageManager相关

自己写的框架功能等在二次使用时的导出,还需要手动选择导出的部分,虽然可以写工具解决,但考虑到unity带的这个包管理方案,一是官方在使用,二是之前公司也用过通过UPM来管理功能插件。所以决定做一个自己的包,顺便实际用一遍。

UnityPackageManager官方文档

知识点记录

UPM不支持使用StreamingAssets,推荐使用Addressables

打开unity project工程,unity会从Packages文件夹的manifest.json中,查找需要加载的包,发送请求获取包并安装到项目中。

可以直接修改manifest.json添加包依赖,也可以在PackageManager中添加(推荐)

包需要外部依赖时,需要在配置表的 dependencies中引入包
在这里插入图片描述

unity下载的包会放在全局缓存文件夹中,方便被本地不同的项目引入
在这里插入图片描述

【可以通过配置PackageManager的配置文件,来修改获取包的网络环境,自定义注册表,自定义资源地址官方介绍】配置注册表

多个包之间依赖项的处理多个依赖的处理

Git管理包流程

1.需要有git仓库,这里用github
github存放思路:我是main里放所有工程文件,upm分支做下载用;(在从git导入package到工程时,git的url需要加#upm分支名)
2.正常编辑包工程,保存并提交到main主干
3.git subtree split --prefix=Assets/packagename --branch upm从主干切取package文件,将文件拉到分支upm里
4.git tag 0.1.0 upm打标签
5.git push origin upm --tags提交到远程分支

注意:包名等不规范会导致脚本用不了
问题:package导入的包,都不能够编辑;虽然可以从Library的packagecache中复制到工程里,但感觉不好。
为什么有的包导入就是导入到Assets(原始的package导入)

问题:
git发布的包里依赖项,无法加载,除非自己配置upm服务器,通过版本号拿;依赖项的git url无法解析【用别人写的git获取包插件】

通过npm服务器https://registry.npmjs.org/来进行依赖的版本引入

工作流:

1.github管理功能插件的开发和upm包
2.将upm包传到npm服务器上
3.工程里配置npm服务器地址

可以形成公网的插件获取下载,以及包的依赖问题解决

node.js安装
注册npm账号
npm地址

操作流程

从头创建功能插件并提交github以及npm

  1. 新建unity项目
  2. Assets下创建插件包名(注意命名规范)
  3. 编辑功能
  4. 插件包文件夹创建package.json,内容编辑(有依赖的需要写上依赖)
  5. 对应创建程序集引用(注意程序集的命名规范)
  6. github上传工程并切分支
git init//生成本地仓库
git remote add origin (git地址)//连接远程仓库
git pull origin main//拉远程数据更新
//如果仓库名称不对需要改名称
//git branch -m old_name new_name将本地仓库的old_name的名称修改为new_name
git add *//提交所有修改(插件工程)到缓存
git commit -m "说明"//提交更改
git push origin main//更新推到远程
git subtree split --prefix=(package包路径) --branch upm //切取包文件到upm分支
git tag 0.0.1 upm//打标记
git push origin upm --tags//向远程upm分支推送
  1. 上传npm服务器(确保有node.js环境以及npm可用),启动命令行
    (确保npm服务器地址是https://registry.npmjs.org不是淘宝镜像)
启动命令行cmd
npm login//登录
//账号
//密码
//邮箱
//邮箱验证
cd 到插件包里,即package.json所在文件夹
npm publish//提交到npm服务器

unity项目配置npm地址

1.打开project setting
2.打开package manager
3.新增地址即可
在这里插入图片描述

相关文章:

  • 数字图像处理——基本运算
  • Cosmos模块化功能链 走向亿级用户的超级Dapp时代
  • 【黑马程序员名师pink老师讲HTML】HTML很容易忘记?有它我不慌的
  • .NetCore项目nginx发布
  • 主流开源OLAP对比分析
  • 二叉搜索树的基本操作 || TreeMap和TreeSet介绍
  • 超详细的数据结构---顺序表的有关教程
  • Exchange Server 2016 安装部署
  • 【C51单片机】中断系统之单一外中断应用
  • 2.2 Linux系统的目录结构与文件类型
  • jedis:使用事务开启watch监控
  • 【趣学算法】第一章 算法之美(上)
  • 以MapBox为核心构建Vue地图组件库教程
  • Web链接测试如何做?
  • 【不是问题的问题】为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的?
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • co.js - 让异步代码同步化
  • CSS实用技巧
  • C语言笔记(第一章:C语言编程)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IOS评论框不贴底(ios12新bug)
  • iOS小技巧之UIImagePickerController实现头像选择
  • jQuery(一)
  • 大整数乘法-表格法
  • 手机端车牌号码键盘的vue组件
  • 携程小程序初体验
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 怎么把视频里的音乐提取出来
  • 字符串匹配基础上
  • # .NET Framework中使用命名管道进行进程间通信
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (BFS)hdoj2377-Bus Pass
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (循环依赖问题)学习spring的第九天
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 使用配置文件
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET命名规范和开发约定
  • .NET业务框架的构建
  • .NET中统一的存储过程调用方法(收藏)
  • .pyc文件是什么?
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @SuppressWarnings注解
  • [ 数据结构 - C++] AVL树原理及实现
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [1]-基于图搜索的路径规划基础