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

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
  • 对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 页面展示效果 管理员功能 首页 销售员管理 维修员管理 客户管理 供应…...

深入浅出 -- 系统架构之分布式架构

​​​​​​分布式架构: 根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 当垂直应用越来越多时,应用之间的交互不可避免,可将共用的基础服务或核心模块抽取出来作为独立服务&#xff0c…...

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填写如下内容&#xff1a; #!/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

最近&#xff0c;写vue代码&#xff0c;判断父组件传来的type来作为条件判断&#xff0c;并用v-if v-else来控制页面展示。 起初用watch监听了type&#xff0c;发现值改变了&#xff0c;但是写在data配置项的visible属性书写错误&#xff0c;未实现响应式&#xff0c;如下&…...

nginx部署前端教程

目录 一、前言二、部署三、注意四、参考 一、前言 一般来说现在的软件项目&#xff0c;都是分用户端以及管理端的&#xff0c;并且是前后端分离的&#xff0c;这里我来记录一下部署两个前端的教程。 部署前端之前需要的准备工作是部署springBoot后端程序&#xff0c;这里我do…...

设计模式:工厂模式

定义 工厂模式&#xff08;Factory Pattern&#xff09;&#xff0c;特别是工厂方法模式&#xff08;Factory Method Pattern&#xff09;&#xff0c;是一种创建型设计模式&#xff0c;它定义了一个创建对象的接口&#xff0c;但将实例化的类推迟到子类中进行。这样&#xff…...

系统监测工具-tcpdump的使用

一个简单的tcpdump抓包过程。主要抓包观察三次握手&#xff0c;四次挥手的数据包 有两个程序&#xff1a;客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等&#xff0c;dstip地址端口指定抓取目的地址…...

Java智慧校园系统源码 微信小程序+电子班牌

Java智慧校园系统源码 微信小程序电子班牌 通过设备管理对百纳智慧校园的智慧班牌以及百纳智慧屏&#xff08;校牌&#xff09;进行统一集中式管理&#xff0c;支持浏览所有设备的基本信息以及在离线状态&#xff0c;支持添加设备、设备一键开关机、一键重启、设置节假日开关机…...

OpenAI Sora:浅析文生视频模型Sora以及技术原理简介

一、Sora是什么&#xff1f; Sora官方链接&#xff1a;https://openai.com/sora 视频模型领头羊Runway Gen 2、Pika等AI视频工具&#xff0c;都还在突破几秒内的连贯性&#xff0c;而OpenAI&#xff0c;已经达到了史诗级的纪录。 OpenAI&#xff0c;永远快别人一步&#xff0…...

canal部署

定义 canal组件是一个基于mysql数据库增量日志解析&#xff0c;提供增量数据订阅和消费&#xff0c;支持将增量数据投递到下游消费者&#xff08;kafka&#xff0c;rocketmq等&#xff09;或者存储&#xff08;elasticearch,hbase等&#xff09;canal感知到mysql数据变动&…...

001集——在线网络学习快速完成——16倍速度

在线网络学习快进方法如下&#xff1a; 电脑下载 Microsoft edge 浏览器&#xff0c;有的电脑是自带的 1、点击右上角… 2、点击"扩展" 3、点击"管理扩展" 4、点击"获取 Microsoft edge 扩展" 5、搜索框里搜" global " 6、获取"…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...