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、获取"…...
多智能体时代,Workflow 为什么开始失效?
子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...
长期使用 Taotoken 过程中对其服务稳定性的主观感受记录
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用 Taotoken 过程中对其服务稳定性的主观感受记录 1. 背景与使用模式 过去的一个季度,我负责的一个中型项目进入…...
免疫细胞,原来真的这么神奇!
免疫系统是覆盖全身的保护自身免受病原体入侵的防卫网络,具有免疫防御、免疫自稳、免疫监视的功能,它能识别并清除病原微生物、病变细胞、衰老细胞等,维持身体内环境的稳定。现代医学研究发现,免疫功能减退是衰老的最重要原因之一…...
告别CodeBlocks!在VScode里用CMake+MinGW搞定LVGL模拟器(附SDL2配置避坑指南)
从CodeBlocks到VScode:打造LVGL模拟器的现代化开发体验 在嵌入式GUI开发领域,LVGL以其轻量级和丰富的功能组件赢得了众多开发者的青睐。然而,官方推荐的CodeBlocks开发环境却让不少习惯了现代IDE的开发者感到不适——界面陈旧、插件生态有限、…...
从隔壁实验室到网易食堂:一个非985研究生的Python爬虫实习转正全记录
从实验室到网易食堂:一位普通研究生的Python爬虫逆袭之路 记得第一次听说隔壁实验室的Lucky拿到网易实习offer时,我们整个实验室都沸腾了。不是因为网易有多难进——事实上每年都有名校生进入各大厂——而是因为Lucky和我们一样,来自一所普通…...
NotebookLM播客工作流优化实战:3个被92%用户忽略的关键提示词配置,提升生成质量400%
更多请点击: https://kaifayun.com 第一章:NotebookLM播客生成的核心原理与局限性 NotebookLM 是 Google 推出的基于用户自有文档进行 AI 助理交互的实验性工具,其播客生成功能并非独立模块,而是依托于底层的“多文档理解 指令驱…...
终极窗口置顶解决方案:用AlwaysOnTop告别多任务切换烦恼
终极窗口置顶解决方案:用AlwaysOnTop告别多任务切换烦恼 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否经常需要在不同窗口间来回切换?是否觉得频…...
NotebookLM辅助文献综述全链路拆解(2024最新版:支持arXiv/DOI/中文知网多源解析)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM文献综述辅助的范式变革 NotebookLM 是 Google 推出的基于用户自有文档的 AI 助手,其核心能力在于对上传 PDF、TXT 等学术文献进行语义索引与上下文感知问答,彻底重构…...
深入浅出:STM32 USB BOS描述符与WCID配置详解(以WinUSB免驱为例)
STM32 USB BOS描述符与WCID配置实战解析:从协议到代码实现 在嵌入式开发领域,USB设备与主机系统的无缝对接一直是开发者关注的重点。传统USB设备在Windows平台上通常需要安装专用驱动程序,这不仅增加了用户使用门槛,也提高了开发维…...
Harnessclaw:轻量级自动化工作流编排工具,告别脚本泥潭
1. 项目概述:一个被低估的自动化利器如果你经常在GitHub上寻找一些能解决实际问题的工具,可能会发现一个现象:很多名字看起来平平无奇、甚至有点“怪”的项目,往往藏着巨大的潜力。harnessclaw/harnessclaw就是这样一个典型的例子…...
