如何拆解Unity 2022.3版本的AssetBundle

2023-12-03 03:15

本文主要是介绍如何拆解Unity 2022.3版本的AssetBundle,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1)如何拆解Unity 2022.3版本的AssetBundle
2)Unity 2022 LTS版本的稳定性
3)关于AssetBundle禁用TypeTree之后的一些可序列化的问题


这是第363篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

AssetBundle

Q:如何拆解Unity 2022.3及以上版本打出来的AssetBundle?AssetStudio只支持到2022.1,都不维护和更新了。

A1:可以参考:GitHub - AssetRipper/AssetRipper: GUI Application to work with engine assets, asset bundles, and serialized files

感谢zerolj@UWA问答社区提供了回答

A2:如果你习惯使用AssetStudio,可以试试我的Fork,目前支持到2022.3。

GitHub:https://github.com/zhangjiequan/AssetStudio
知乎:AssetStudio升级:支持到Unity 2022.3 - 知乎

感谢Jackie@UWA问答社区提供了回答


Platform

Q:想从Unity 2021 LTS升级到Unity 2022 LTS,想问下2022的稳定性怎么样?

主要想要的Feature是DOTS的Production Version和Material Variant。

A:DOTS 1.0和DOTS 1.1这两个版本,会导致开发过程中体验比较差(Editor卡、崩溃、莫名其妙编译错误等),对于大规模项目不友好。

运行时与真机的性能不一致,不同真机的性能不一致,需要尽早固化DOTS的核心需求代码进行兼容测试,主要是安卓大小核的问题。

DOTS 1.0至今没有很硬的上线项目,DOTS 0.51甚至更低版本的DOTS都有大DAU项目验证。资料稀少,势必会趟不少自己专属的坑,得有时间预算。

几个DOTS 1.0的功能坑:EntityGraphicAPI,在低端安卓上性能奇差,官方也没有解决的意愿,解决方案是手动修改基于GPU Instance的渲染管线。2D透明的排序有需求的需要魔改URP。

Physics模块如果只用碰撞检测不用物理模拟,建议自己重写,性能可以比自带的提升数十倍。

不要相信TransformAcc。在Entity Query时获取Mono脚本会产生巨量GC,自己魔改源码(很好找这个位置,就是它每次new了一个大数组)开发配套的池去解决这个问题。

其他的由于你自身原因写出来的指针Bug基本都是偶发崩溃,需要大量时间去排查,不按DOTS约定很容易写出数组越界,因为你不知道底层给你的什么块,你Filter之后是什么样,只能小心地去写。按照DOTS规定则会报出易于定位的错误。

林林总总加起来用哪个版本都需要时间去了解,致命坑已经罗列,希望有所帮助。

感谢刘泰言@UWA问答社区提供了回答


AssetBundle

Q:如果AssetBundle禁用了TypeTree,Unity在加载的时候会对其引用的脚本进行“签名”校验(Property Hash和FulIName),而包内的脚本信息只在打包的时候生成,并不能直接更新。因此,在禁用TypeTree的时候,貌似不能对可序列化脚本进行变动更新。

于是,想要咨询两个问题:
1、包内的脚本“签名”信息存放在哪里,存放了什么内容? 猜测是在assets/bin/Data,但具体的位置与内容不清楚。

2、能否在禁用TypeTree的情况下实现可序列化脚本的变化更新(自行保证代码与资源一致)。

A:如果有新增类,DLL,那么还需要更新xxxx_Data\ScriptingAssemblies.json和xxxx_Data\globalgamemanagers,否则就算libil2cpp.so和新的Bundle对上,也会检查不通过。

如果有新的RuntimeInitializeOnLoad函数,那么xxxx_Data\RuntimeInitializeOnLoads.json也要更新。否则相关函数就无法自动启动。

从理论上而言,只要不动到可序列化字段,那么脚本可以改可以更。如果可序列化字段变动了,那么TypeTree就变化,相应的TypeTreeHash也跟着变化,所以so更新以后,引擎就无法解析旧的Bundle。

感谢黄程@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

这篇关于如何拆解Unity 2022.3版本的AssetBundle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/447875

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地