问答 Addressable 编辑器相关开发问题

侑虎科技 · 2021年05月10日 · 1011 次阅读

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问答社区提供了回答

Addressable

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

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

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

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

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

Addressable

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

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

Log 显示的报错是:

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

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

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

感谢题主 jim@UWA 问答社区提供了回答

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 之类的问题。这个值存在 LibraryEditorUserBuildSettings.asset 文件中。

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

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问答社区提供了回答

封面图来源于网络


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

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

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册