Addressable编辑器相关开发问题

Addressable编辑器相关开发问题

1)Addressable编辑器相关开发问题
​2)Addressable动态设置更新地址
3)Addressable在网络差的环境中下载资源
4)Android ETC2 Fallback的疑问
5)内置Shader中“Dependency”的定义


这是第245篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Addressable

Q:我想通过编辑器脚本来做自动导入下图这个选项并打钩,能自己设置相关的Key。有没有参考的工程或代码示例?谢谢!

A:用AssetDatabase.AssetPathToGUID和AddressableAssetSettings.CreateOrMoveEntry。

感谢老王@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60616b62f2c8273bbbf2a648


Addressable

Q:Addressable动态配置的热更新地址,使用了文档里面的静态变量 (放大括号里),Addressable启动后获取到的Catalogs.Count一直为零,怀疑是地址的问题,有没有要求这个类也是静态的?

如果我配死地址,是能更新下来的,比如这样:

这种更新已经测试通过,目前是想在生成首包后动态去改这个RemoteLoadPath。

A:我们是这样子的,RemoteLoadPath指向一个static的property,这个property从配置表里返回资源更新的地址。

感谢jim@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6065c723afbc233466c02cf7


Addressable

Q:我们使用Addressable来做资源的热更新。现在模拟了一个较差网络环境下的下载资源情况,使用Windows上模拟丢包的软件模拟了网络环境,丢包率设置为30%。

Addressable的下载会卡死在某个百分比,DownloadDependenciesAsync的Completed事件不会被触发,所以无法通过AsyncOperationHandle的status判断是失败还是成功。

Log显示的报错是:

请问这种情况有什么好的解决方法吗?

A:后来发现是有几个资源的Time Out值设置得太大了,导致一直在等待,所以进度条卡死。解决方法是将Time Out值设置的小一点,并增加retry次数。

我Time Out设置的是20。感觉不宜太长,否则超时的时候下载进度感觉会长时间卡死;太短的话,移动网络太差,也经常会超时导致超时下载失败。

感谢题主jim@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/605bfa43cfa35d5b53669c47


Editor

Q:我们的游戏在模拟器上运行一会儿就会崩溃,怀疑是图片被解压成RGBA32导致内存过大产生的崩溃。Android ETC2 Fallback设置为16 bit是不是能够大幅降低在低端手机的内存占用呢?

另外我在Build Setting选择ETC2 Fallback后,Project Setting没有任何变化,这个值是保存在哪里的?应该怎么上传?(版本:Unity 2018.4.31)

A:模拟器一般内存都够的,如果怕是内存问题可以调整一下分配给模拟器的内存。最好还是连上Logcat看一下Log,是因为内存问题,还是32位或者64位应用的问题,又或者是64位LuaJit之类的问题。这个值存在Library\EditorUserBuildSettings.asset文件中。

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6062e8bdafbc233466c02cb5


Shader

Q:正在尝试自定义Terrain的Shader,发现内置Shader的末尾有这样两行,想问问其中的“Dependency”是做什么用的,后面指定的Shader起什么作用?

Dependency “AddPassShader” = "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass"
Dependency “BaseMapShader” = “Diffuse”

A:Dependency是一个未文档的关键词,其用于指定Shader依赖关系,实际作用有两个:

  • 打包的时候依赖不会遗漏,可以通过AssetBundle Browser验证。
  • Unity 2019之后可以通过C#接口Shader.GetDependency(等号左侧依赖名) 获取等号右侧Shader名。

地形系统那么做,是因为有三种光照模型,通过GetDependency(依赖名) 可以减少一些Shader名的硬编码,依赖名充当了接口的作用。

感谢庄沁@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ab8b537d35eb22c10a0a426

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)