关于rendering:如何定位Unity死循环导致的完全卡死

10次阅读

共计 2270 个字符,预计需要花费 6 分钟才能阅读完成。

1)如何定位 Unity 死循环导致的齐全卡死
​2)如何设定 Unity AssetBundle 单个包大小
3)MaterialPropertyBlock 批改 Stencil 相干参数
4)线性空间中动作文件管制材质球色彩失真问题
5)DrawMeshInstancedIndirect 在华为手机上生效


这是第 240 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

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

Script

Q:运行游戏时,在某些特定的状况下,Unity 会忽然卡死,看工作控制器里的 Unity 过程内存会继续飙升到很高的值。

因为目前游戏工程曾经很大了,并且脚本泛滥(Lua+C#),呈现这种状况时又没有异样日志,断点也断不到地位,也不晓得是哪里呈现的死循环异样了,这个问题卡了很久,没思路了,求解。

A1:经网友真木提醒了这篇文章:https://www.cnblogs.com/lijiajia/p/10817407.html

通过 debug.sethook 这个函数来注册一个 Hook 的 Handler,把每一行或者每个函数的调用都打印进去,就能晓得死循环的地位了。这种办法可用于找 Lua 的死循环,如果是 C# 的死循环,须要其它办法。

感激题主 loy_liu@UWA 问答社区提供了答复

A2:如果是 C# 的死循环,能够应用 VS 附加 Unity 调试,暂停整个游戏,而后切换到主线程,看看主线程以后运行到了哪一句。

感激西元前的史莱姆 @UWA 问答社区提供了答复

AssetBundle

Q:Unity AssetBundle 单个包大小多少比拟适合?

A1:以前 LZMA 格局时,是倡议小于 1MB 的,当初曾经没有这个束缚了。因为 LoadFromFile+LZ4 的加载速度曾经十分快了。所以,文件大小更倡议从热更新的角度登程,尽可能不要给热更新产生大麻烦即可。

该问答由 UWA 提供

A2:楼上说得对,读取速度曾经不是问题,不要太小也不必太大,集体感觉 1 -10MB 间差不多都能够,我集体是以应用的汇集性把每个包管制在几 MB 左右。

感激徐军 @UWA 问答社区提供了答复

Material

Q:我在原生的 Sprite-default Shader 中退出了 Stencil 的相干设置,在编辑器状态下用 MaterialPropertyBlock 批改 Stencil 的 Comp 和 Ref,在 Inspector 面板中该值曾经被批改,然而在 Frame Debugger 中并未失效批改值,还是未修改前的设置,是不能用 MaterialPropertyBlock 改 Stencil 的相干参数吗?

A:可参考以下信息:

感激羽飞 @UWA 问答社区提供了答复

Rendering

Q:线性空间中动作文件管制材质球色彩失真问题。
以下是间接设置材质球的色彩显示:

以下是通过 Animator 动作文件设置材质球的色彩显示:

为什么不同呢?材质球是 [HDR] Color 有问题。(版本:Unity 2019.4.9f)

A:在线性空间中,写入到 MaterialPropertyBlock 的渲染色彩参数,在渲染时会转换到 Gamma 空间,即变成 2.2 次幂。

用动画批改材质的色彩,其实是向 MaterialPropertyBlock 中配置参数。所以在应用 K 材质球设计动画时,须要把色彩值的 0.4545 次幂写入到曲线中。

感激张首峰 @UWA 问答社区提供了答复

Rendering

Q:Unity 2018.4.24 的 DrawMeshInstancedIndirect 在华为手机上生效是为什么?我应用 Testin 的华为手机进行测试 DrawMeshInstancedIndirect 接口,试过的都是不行的,然而我用其余的手机就都能够。有遇到同样问题吗?

A1:贴上具体日志看看,而后把华为手机的设施信息贴上,最初问下是不是带麒麟 CPU 的华为机。

感激 Robot.Huang@UWA 问答社区提供了答复

A2:因为驱动程序问题,对于仅具备 OpenGL ES 3.0 的 Adreno GPU 的 Android 设施禁用了 GPU 实例反对。

Graphics: GPU Instancing: Added support for Android with OpenGL ES 3.0 or newer. Note however that GPU instancing support is disabled for Android devices that have the Adreno GPU with only OpenGL ES 3.0, because of driver issues.

能够应用 SystemInfo.supportsInstancing 检测机器是否反对 GPU Instancing,最保险的形式就是 OpenGL ES 3.1 及以上反对。

感激郑骁 @UWA 问答社区提供了答复

A3:最初发现是华为 Mali 不反对 SSBO 的起因。

感激题主 halm@UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

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

正文完
 0