Unity构建详解(6)——SBP的Bundle写操作生成
以下三个操作实际上是为了得到构建Bundle需要的其他参数,最关键的Bundle组装参数在上文已经说过了,至于这三个操作的具体细节不用过于追究,一般不怎么会取修改。
这些参数采用命令模式被封装起来,这是常见的参数非常多的时候的处理方式。
至于为什么要有这些参数,其实取决于后面的Writing Task
【GenerateBundleCommands】
- 对BuildContent.BundleLayout中的 每个Asset bundle创建对应的AssetBundleWriteOperation
- 创建WriteCommand
- 根据filename和WriteData.FileToObjects知道一个要写哪些Object
- 将每个Object封装成SerializationInfo,其有两个字段
- 一是Object对应的ObjectIdentifier
- 一个是serializationIndex,表不同Object在File中的标识
- 创建BuildUsageTagSet
- 从DependencyData.AssetUsage获取每个Asset的Usage,然后Union
- 创建BuildReferenceMap
- referenceMap.AddMappings(command.internalName, command.serializeObjects.ToArray());
- 创建DependencyHash
- 从DependencyData.DependencyHash得到每个Asset的Hash128
- 合起来再计算一次Hash HashingMethods.Calculate(dependencyHashes).ToHash128()
- 创建AssetBundleInfo
- 得到bundleName
- 从DependencyData.AssetInfo得到每个Asset对应的AssetLoadInfo
- 创建WriteCommand
- 对Scene Bundle中的创建SceneBundleWriteOperation
- 创建WriteCommand
- 创建BuildUsageTagSet
- 创建BuildReferenceMap
- 创建DependencyHash
- 创建SceneBundleInfo:只有第一个场景有该参数
- 得到bundleName
- 对每个Scene引用的Asset创建SceneLoadInfo,其记录了三个信息
- Scene的GUID、Scene的资源路径、Scene归属的内部文件名
- 创建PreloadInfo
- 场景的referencedObjects中有而File中没有的要预先加载
- 填充WriteData
- m_WriteData.WriteOperations.Add(operation);
- m_WriteData.FileToUsageSet.Add(command.internalName, usageSet);
- m_WriteData.FileToReferenceMap.Add(command.internalName, referenceMap);
【GenerateSubAssetPathMaps】
这里主要是为了处理BuildExtendedAssetData,创建对应的AssetLoadInfo
- ExtendedAssetData.ExtendedData获取扩展数据的Asset的guid
- 从WriteData.AssetToFiles[asset][0]获取该Asset要被写入哪个文件
- 从WriteData.WriteOperations找到该文件对应的写操作
- 从写操作中的AssetBundleInfo获取该Asset的AssetLoadInfo
- 获取该Asset对应的扩展数据的Object,根据该Asset的AssetLoadInfo生成扩展的Object的AssetLoadInfo
- 将生成的AssetLoadInfo放入写操作中的AssetBundleInfo中的AssetLoadInfoList中
【GenerateBundleMaps】
- 创建临时的map关系
- 从WriteData.AssetToFiles获取该Asset对应的MainFile
- 从DependencyData.AssetInfo和DependencyData.SceneInfo获取该Asset的referencedObjects
- 进而得到MainFile的referencedObjects
- 从WriteData.AssetToFiles获取该Asset的MainFile依赖的其他File
- 获取其他File依赖的Asset
- 填充BuildReferenceMaps,在GenerateBundleCommands只做了MainFile的,其他File没做
- MainFile有自己全部的Object,不用引用其他的
- 其他File引用的Object被剥离了,需要记录引用的哪个File中的哪个Object
- referenceMap.AddMapping(file, serializedObject.serializationIndex, serializedObject.serializationObject);
- 注意区分File中Obejct的索引serializationIndex和Asset中Object的索引FileID
- 填充BuildUsageTagSet
相关文章:
Unity构建详解(6)——SBP的Bundle写操作生成
以下三个操作实际上是为了得到构建Bundle需要的其他参数,最关键的Bundle组装参数在上文已经说过了,至于这三个操作的具体细节不用过于追究,一般不怎么会取修改。 这些参数采用命令模式被封装起来,这是常见的参数非常多的时候的处…...
2024新版PHP在线客服系统多商户AI智能在线客服系统源码机器人自动回复即时通讯聊天系统源码PC+H5
搭建环境: 服务器 CPU 2核心 ↑ 运存 2G ↑ 宽带 5M ↑ 服务器操作系统 Linux Centos7.6-7.9 ↑ 运行环境: 宝塔面板 Nginx1.18- 1.22 PHP 7.1-7.3 MYSQL 5.6 -5.7 朵米客服系统是一款全功能的客户服务解决方案,提供多渠道支持…...
使用GPT需要注意的事项
GPT出来之后,基本就告别浏览器搜索问题答案了。将问题原封不动的copy给GPT基本可以得到解答。 但是这个也有弊端,那就是太依赖GPT了。 1,使用GPT需要更强的专业知识:除了能问对问题,还要具备识别GPT&q…...
学习人工智能:为何PyTorch深度学习框架不可或缺
在人工智能(AI)的浩瀚领域中,深度学习作为其核心分支,正以其强大的数据处理能力、模式识别能力和预测能力引领着科技的飞速发展。而在深度学习的众多工具与框架中,PyTorch无疑是一颗璀璨的明星。本文将从PyTorch的特点…...
Python基于Tkinter的加法游戏
定制魏:QTWZPW,获取更多源码等 目录 题目概述 详细设计 函数设计 总体设计 重要代码...
基于Springboot4S店车辆管理系统
采用技术 基于Springboot4S店车辆管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 首页 销售员管理 维修员管理 客户管理 供应…...
深入浅出 -- 系统架构之分布式架构
分布式架构: 根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 当垂直应用越来越多时,应用之间的交互不可避免,可将共用的基础服务或核心模块抽取出来作为独立服务,…...
6. Z 字形变换(Java)
目录 题目描述:输入:输出:代码实现: 题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如…...
【Linux入门】用户的基本指令
Linux操作系统又被称之为“核心(kernel)” 。但一般的用户,不能直接使用kernel,而要通过kernel的“外壳”程序——命令行解释器shell,来与 kernel 沟通。这是因为 kernel 对于一般的用户来说太过复杂,且不让…...
3.9 Python格式化字符串
Python格式化字符串(格式化输出) 我们之前讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者能够…...
Linux驱动学习:从Linux主机nfs共享文件到uboot
第一步:在Linux主机上开启NFS服务,使用如下命令安装NFS服务: sudo apt-get install nfs-kernel-server rpcbind 第二步:创建一个文件夹用于共享,直接以nfs命名就行: 第三步:打开nfs服务配置文…...
Linux下场景模拟--cpu、内存打满测试
Linux下场景模拟–cpu、内存打满测试 打满CPU占用 编写脚本vi /root/cpu_run_full.sh vi /root/cpu_run_full.sh填写如下内容: #!/bin/bash function while_run_cpu() {while true;doi2;done }function cpu_full() {for ((i0; i<$1; i));dowhile_run_cpu &am…...
Vue中watch与计算属性computed
最近,写vue代码,判断父组件传来的type来作为条件判断,并用v-if v-else来控制页面展示。 起初用watch监听了type,发现值改变了,但是写在data配置项的visible属性书写错误,未实现响应式,如下&…...
nginx部署前端教程
目录 一、前言二、部署三、注意四、参考 一、前言 一般来说现在的软件项目,都是分用户端以及管理端的,并且是前后端分离的,这里我来记录一下部署两个前端的教程。 部署前端之前需要的准备工作是部署springBoot后端程序,这里我do…...
设计模式:工厂模式
定义 工厂模式(Factory Pattern),特别是工厂方法模式(Factory Method Pattern),是一种创建型设计模式,它定义了一个创建对象的接口,但将实例化的类推迟到子类中进行。这样ÿ…...
系统监测工具-tcpdump的使用
一个简单的tcpdump抓包过程。主要抓包观察三次握手,四次挥手的数据包 有两个程序:客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等,dstip地址端口指定抓取目的地址…...
Java智慧校园系统源码 微信小程序+电子班牌
Java智慧校园系统源码 微信小程序电子班牌 通过设备管理对百纳智慧校园的智慧班牌以及百纳智慧屏(校牌)进行统一集中式管理,支持浏览所有设备的基本信息以及在离线状态,支持添加设备、设备一键开关机、一键重启、设置节假日开关机…...
OpenAI Sora:浅析文生视频模型Sora以及技术原理简介
一、Sora是什么? Sora官方链接:https://openai.com/sora 视频模型领头羊Runway Gen 2、Pika等AI视频工具,都还在突破几秒内的连贯性,而OpenAI,已经达到了史诗级的纪录。 OpenAI,永远快别人一步࿰…...
canal部署
定义 canal组件是一个基于mysql数据库增量日志解析,提供增量数据订阅和消费,支持将增量数据投递到下游消费者(kafka,rocketmq等)或者存储(elasticearch,hbase等)canal感知到mysql数据变动&…...
001集——在线网络学习快速完成——16倍速度
在线网络学习快进方法如下: 电脑下载 Microsoft edge 浏览器,有的电脑是自带的 1、点击右上角… 2、点击"扩展" 3、点击"管理扩展" 4、点击"获取 Microsoft edge 扩展" 5、搜索框里搜" global " 6、获取"…...
MiniCPM-o-4.5-nvidia-FlagOS部署排错指南:常见网络问题与403 Forbidden错误解决
MiniCPM-o-4.5-nvidia-FlagOS部署排错指南:常见网络问题与403 Forbidden错误解决 1. 引言 刚拿到MiniCPM-o-4.5-nvidia-FlagOS这个镜像,兴冲冲地准备部署,结果第一步就卡住了——服务起不来,或者好不容易起来了,一调…...
ZYNQ嵌入式开发实战:基于PetaLinux的Linux系统移植与优化
1. 为什么选择PetaLinux进行ZYNQ开发 第一次接触ZYNQ平台时,我和很多开发者一样被它的双核ARM Cortex-A9处理器FPGA的异构架构所吸引。但在实际开发中,传统方式移植Linux系统需要手动配置uboot、内核、设备树等组件,整个过程就像在玩"俄…...
Rocky Linux 9.4上iRedMail 1.6.8邮件系统保姆级安装指南(含SOGo避坑技巧)
Rocky Linux 9.4上iRedMail 1.6.8邮件系统全栈部署实战(附SOGo极速安装方案) 在数字化转型浪潮中,企业级邮件系统作为基础通信设施的重要性愈发凸显。对于追求自主可控的技术团队而言,基于Rocky Linux搭建iRedMail开源邮件平台&am…...
Ubuntu22.04实战:从零到一,手把手教你用LLamaFactory微调并部署专属大模型
1. 环境准备与基础配置 在开始微调大模型之前,我们需要先搭建好基础环境。Ubuntu 22.04作为稳定的Linux发行版,是运行AI工作负载的理想选择。我建议使用全新的系统环境,避免依赖冲突。下面是我在多次部署中总结的最佳实践: 首先更…...
【自动驾驶】从理论到实践:二自由度车辆动力学模型的参数辨识与工程应用
1. 为什么需要二自由度动力学模型? 第一次调试自动驾驶横向控制器时,我用纯运动学模型在停车场测试,车辆像醉汉一样画着"S"形路线。直到工程师老张提醒:"超过40km/h就得用动力学模型,轮胎都变形了还当积…...
Parabolic全能视频下载工具:200+网站一站式解决方案
Parabolic全能视频下载工具:200网站一站式解决方案 【免费下载链接】Parabolic Download web video and audio 项目地址: https://gitcode.com/GitHub_Trending/pa/Parabolic 你是否遇到过这些下载难题?收藏的教学视频过期失效、旅行素材无法离线…...
Yarle:Evernote到Markdown的文档转换开源工具全指南
Yarle:Evernote到Markdown的文档转换开源工具全指南 【免费下载链接】yarle Yarle - The ultimate converter of Evernote notes to Markdown 项目地址: https://gitcode.com/gh_mirrors/ya/yarle 文档转换是现代知识管理的重要环节,而Yarle作为一…...
运算符(重要:++、--)
public class 运算符 {/*算术运算符: — * / % --赋值运算符:关系运算符:> < > < ! instanceof (返回结果为boolean值)逻辑运算符:&& || !* */public static void main(String[] args) {int a1…...
CFA一级2025年备考:我如何只用Kaplan Notes自学通关(附详细时间表与避坑清单)
CFA一级2025年备考:我如何只用Kaplan Notes自学通关(附详细时间表与避坑清单) 作为一名金融从业者,去年我决定挑战CFA一级考试。由于工作繁忙且预算有限,我选择了完全依赖Kaplan Notes的自学路径。经过5个月的坚持&…...
高效部署Qwen3-Reranker-0.6B:基于vLLM和Gradio的完整解决方案
高效部署Qwen3-Reranker-0.6B:基于vLLM和Gradio的完整解决方案 1. 模型概述与核心价值 1.1 Qwen3-Reranker-0.6B简介 Qwen3-Reranker-0.6B是通义千问系列中专门针对文本重排序任务优化的轻量级模型。该模型采用6亿参数设计,在保持高性能的同时显著降低…...
