UseContentHash选项能否在打包AssetBundle时计算可靠的Hash

1)UseContentHash选项能否在打包AssetBundle时计算可靠的Hash
2)如何清理Native Reserved部分的内存
3)Addressables资源完整性校验
4)通过Image.color和CanvasRenderer.SetColor修改UI组件颜色的区别


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

AssetBundle

Q:看到Unity 2022.3新增了一个BuildAssetBundleOptions.UseContentHash,请问打包AssetBundle的时候是否能计算可靠Hash?

官方信息如下:
Unity - Scripting API: BuildAssetBundleOptions.UseContentHash (unity3d.com)

A:建议别用,增加这个是为了修复我提交的一个Bug Report:
LOST SPRITE REFERENCES IN BUNDLES WHEN MOVING THE ASSETS [ASSETBUNDLE INCREMENTAL BUILD BUG, WORKS WITH UCBP]

结果没修好,会造成新的Bug:
ADDING OR REMOVING ASSETS TO BUNDLES WILL CAUSE OTHER ASSETS TO BE REBUILT WHEN BUILDASSETBUNDLEOPTIONS.USECONTENTHASH IS USED

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


Memory

Q:请问以下情况下,如何清理Native Reserved部分的内存?

前置条件:
1. Android IL2CPP ARM64版本
2. Unity 2021.3.31f1
3. Memory Profiler版本为0.71 Preview版本

已知:ManagedHeap的Reserved部分,也就是上图中323.4MB部分,会在以下代码执行大约5次之后降低,最终会和In Use部分持平,也就是Managed Reserved大约会变成260.1MB。

Resources.UnloadUnusedAssets();
GC.Collect();

对于Native Memory,尽管我把In Use部分降低到了253.2MB,但Reserved部分,也就是0.89GB部分,却一直没法降低。

我想知道是否有什么函数可以降低这个Reserved内存?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


Addressable

Q:游戏是启动的时候检测资源更新并下载,当下载到一半的时候直接退出游戏。再启动游戏的时候Addressables无法检测到要更新的资源。

我查看了下载写入资源的文件夹,发现Catalog文件已经完全写入了,估计是这个原因导致Addressables无法检测到更新的资源。

请问,像这种下载到一半,希望Addressables能接着上次的进度继续下载的要怎么处理呢?

还有一点,不知道Addressables有没有提供资源完整性校验的方法。

我希望能在资源全部下载完成后,再检测一遍资源文件是否完整(完全下载完成以及文件是否有损坏)。并把这个检测的功能放到UI上,这样在一些不可预测的环境下,不至于卡死且无法解决问题。

A:每个版本下载完整应该有一个MD5值,这个就是catalog.hash的值。如果下载完成,成功进入游戏,就该把这个值写入PlayerPrefs。下次进入的时候继续判断这个值是否和服务器的catalog.hash相等,如果不相等,说明上次没有下完整,本次该继续走Addressables.DownloadDependenciesAsync方法。Addressable内部会自动针对已经下载的Bundle不会继续下载,因此只会下载最新差异的大小。

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


UI

Q:通常,当我们想要更改Image组件的Color时,我们可以直接修改Image组件的Color属性。原理是修改网格的顶点颜色。此操作有一定的开销,因为会导致Canvas.BuildBatch操作。

我最近看了一些UGUI源码,发现当Button组件设置为Color Tint类型时,点击时会出现颜色渐变过程,此时会触发一个协程,每次执行协程都会修改CanvasRenderer组件的颜色,而不是直接修改Image组件的Color属性。

public abstract class Graphic : UIBehaviour, ICanvasElement
{private readonly TweenRunner<ColorTween> m_ColorTweenRunner;//trigger on clickpublic virtual void CrossFadeColor(Color targetColor, float duration, bool ignoreTimeScale, bool useAlpha, bool useRGB){//...var colorTween = new ColorTween {duration = duration, startColor = canvasRenderer.GetColor(), targetColor = targetColor};//The callback here will be triggered in the coroutine,//Modify the color of the canvasRenderer componentcolorTween.AddOnChangedCallback(canvasRenderer.SetColor);colorTween.ignoreTimeScale = ignoreTimeScale;colorTween.tweenMode = mode;//Start coroutinem_ColorTweenRunner.StartTween(colorTween);}
}

请问这两种写作方式之间的本质区别是什么?直接修改CanvasRenderer.color是否更有效?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

封面图来源于网络


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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用PLC网关实现PLC远程调试?

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;是核心组成部分。但传统PLC调试方式往往需要工程师亲临现场&#xff0c;这不仅耗时&#xff0c;还增加了成本。好消息是&#xff0c;借助PLC网关&#xff0c;我们可以实现PLC的远程调试&#xff01;今…

Linux编辑器vim的基本操作(详解及GIF演示)

&#x1f4ab;Linux开发工具vim 在我们初学某门语言时可能接触过使用记事本编辑代码&#xff0c;在之后我们开始接触visual studio等集成开发环境&#xff0c;对于这种基于图形化界面的编辑工具我们可以说已经十分熟悉了&#xff0c;那么接下来我们就来介绍一下Linux中的编辑器…

Prometheus实战篇:Prometheus监控redis

准备环境 docker-compose安装redis docker-compose.yaml version: 3 services:redis:image:redis:5container_name: rediscommand: redis-server --requirepass 123456 --maxmemory 512mbrestart: alwaysvolumes:- /data/redis/data: /dataport:- "6379:6379"dock…

有没有游泳可以戴的耳机?游泳耳机入耳式好,还是骨传导好

游泳是一项既能锻炼身体又能让人放松心情的运动。我们知道&#xff0c;音乐能够为我们的水上时光增添更多的乐趣。那么&#xff0c;在众多游泳耳机中&#xff0c;如何选择一款既适合自己的需求又具备良好性能的产品呢&#xff1f; 首先&#xff0c;我们要了解的是&#xff0c;…

基于ssm校园线上订餐系统的设计与实现论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

docker (portainer 安装nginx)

汉化版步骤可以参考&#xff1a;写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/135258056 一、创建容器 二、配置端口&#xff0c;以及容器卷挂载 挂载目录配置&#xff1a;(下方截图的目录如下&#xff0c;docker 改为 mydocker&#xff0c;用docker作为根…

jenkins忘记密码后的操作

1、先停止 jenkins 服务 systemctl stop jenkins 关闭Jenkins服务 或者杀掉进程 ps -ef | grep jenkins &#xff5c;awk {print $2} | grep -v "grep" | xargs kill -9 2、找到 config.xml 文件 find /root -name config.xml3、备份config.xml文件 cp /root/.jen…

【SpringBoot】-Spring MVC项目如何传递参数?

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Framework】 主要内容&#xff1a;使用SpringBoot的SpringMVC框架传递各种参数&#xff0c;如传对象&#xff0c;传表单&#xff0c;传文件。后端对前端的请求信息的获取&#…

shell sshpass 主机交互 在另外一台主机上执行某个命令 批量管理主机 以及一些案例

目录 作用安装 sshpasssshpass 用法在远程主机执行某个命令 案例批量传输密匙批量拷贝文件批量修改密码 作用 就是用一台主机 控制另外一台主机免交互任务管理工具方便批量管理主机使用方法就是在ssh 前边加一个 sshpass 安装 sshpass # 安装 sshpass yum -y install sshpas…

【MySQL】数据库之MHA高可用

目录 一、MHA 1、什么是MHA 2、MHA 的组成 3、MHA的特点 4、MHA的工作原理 二、有哪些数据库集群高可用方案 三、实操&#xff1a;一主两从部署MHA 1、完成主从复制 步骤一&#xff1a;完成所有MySQL的配置文件修改 步骤二&#xff1a;完成所有MySQL的主从授权&#x…

Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (二)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;一&#xff09;” 的续篇。在今天的文章中&#xff0c;我们接着来完成如何进行分页及过滤。 分页 - pagination 应用程序处理大量结果通常是不切实际的。 因此&#xff0…

【计算机算法设计与分析】棋盘覆盖问题(C++_分治法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在一个 2 k 2 k 2^k \times 2^k 2k2k个方格组成的棋盘中&#xff0c;若恰有一个方格与其他方格不同&#xff0c;则称该方格为一个特殊方格&#xff0c;且称该棋盘为一个特殊棋盘。显然&#xff0c;特殊方格在棋…