1)开启Allow unsafe code的影响
2)Unity线性空间下,PhotoShop制做半透明图片,制做带外发光、内发光的图层如何正确导出
3)Unity中实现完善的暂停机制
4)RenderPipelineManager.DoRenderLoop_Internal的堆内存优化
5)Unity 2020版本中ARBackgroundRenderer和ARRenderMode的相应替代类安全
这是第223篇UWA技术知识分享的推送。今天咱们继续为你们精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。网络
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)框架
Q:最近项目引进几个插件,以及学习别人的插件,代码中用到了unsafe关键字,须要再project settings中勾选Allow unsafe code,以前知道一点是不勾选最好,可是勾选之后到底哪里很差也忘了,也没有勾选以后上线来验证,因此问问你们,是否应该勾选,以及勾选以后有何影响?函数
A:勾了没什么实际上的坏处,只是因为.net当初设计的时候是不鼓励使用unsafe代码的,因此在编译器默认设置这个门槛,鼓励你们尽量使用安全的代码(也就是不要直接操做原生内存地址)。可是,不少高性能的C#代码为了最大限度地高效访问内存,不可避免要用unsafe,只要保证unsafe代码被限制在较小的范围并严格测试保证不会出内存访问错误,对整个工程来讲就不是大问题。oop
感谢招文勇@UWA问答社区提供了回答性能
Q:你们好,由于项目是PBR项目,因此Unity使用线性空间,如今在制做UI的时候,带透明通道的图片,混合时候就会出错。学习
咱们先后试了几种方法:
1. 改PhotoShop的工做空间为线性的,定义Gamma为1.0:
2. 单独改用灰度系数混合RGB颜色:1.00,这样大部分状况下,Unity中效果PhotoShop中效果就是一致的:
3. 改Unity渲染管线。测试
以上方法都有一些局限和问题。优化
1. 普通不透明图层有些渐变效果没法绘制,由于线性空间下的暗部颜色精度不够;
2. PhotoShop制做带外发光、内发光的图层合并以后会错误:动画
3. 由于用的仍是内置Forward管线,影响太大,低端机效率低下,暂不考虑。
咱们最终采用的是第二种,美术仍是在Gamma工做空间做图,只是图层混合采样。
最后想问下你们,针对线性空间下的半透明图层如何导出?
或者有没有什么办法能处理这种外发光、内发光图层问题?
A1:目前公司项目都采用Linear方式,美术直接修改PhotoShop设置,出图事后,在Unity中测试,能与原图是一个色彩,以前也尝试过其余办法,如Shader修正,可是都有必定的问题,目前采用的这种方案,暂未发现问题。
感谢范超@UWA问答社区提供了回答
A2:用下图的配置,在PhotoShop CC 2019里试了下,只要不合并图层,直接导出png,再放到Unity中就没有问题。另外如问题中的例子,只要从下向上合并图层(带着背景),最终结果就没问题。多是PhotoShop的Bug。
就我和美术了解的状况,他们不多合并图层。通常导出就是把不须要的图层隐藏了。因此这种状况应该是能够避免的。
感谢张首峰@UWA问答社区提供了回答
Q:目前使用TimeScale=0来暂停游戏,可是在UI上不想让特效和动画暂停,而在某些战斗场景,只但愿暂停一部分逻辑。若是把TimeScale=0,就要处理ParticleSystem、TrailRenderer、Spine动画等组件,特别是TrailRenderer和Spine都须要修改源码。若是不用TimeScale=0, 是否是就要在框架层就处理好各模块的更新逻辑?
A1:常规的作法确实就如你说的,不用TimeScale=0,各个地方去实现暂停,而后统一管理。
感谢邓永健@UWA问答社区提供了回答
A2:可参考这篇文章: 《Unity Chronos - Time Control 时间控制器》
感谢黄程@UWA问答社区提供了回答
Q:项目采用了URP,用UWA进行了初步测试,发现RenderPipelineManager.DoRenderLoop_Internal分配了不少堆内存,这个函数是URP中的内置函数吗?应该如何定位问题进行优化?
A:这个函数是内置用于SRP的总函数,不过度配堆内存的颇有多是题主本身写的C#函数。从图中来看,目前堆内存分配的太多了,建议经过GOT(Online)中的Mono模式来进行测试,就能够看到其具体的堆内存分配状况了。经过“倒序”查看方式,能够直接查看分配的最低级子函数,以下图所示。
以上回答由UWA提供
Q:请问下,如下这两个类如今有替代类吗?是怎么规划处理的?
UnityEngine.XR.ARBackgroundRenderer
UnityEngine.XR.ARRenderMode
以上这两个类经测试:
Unity版本:2020.1.4f1c1,找不到;
Unity版本:2019.4.7f1,找获得。
我又试了下当前最新的Untiy 2020.2.0b6版本这两个类也没有。
看了些资料,Unity 2020版本后,这两个类应该就被删除了。
A:Unity新版本将不少功能都是以Package的方式导入,关于AR从PackageManager中导入AR Foundation包,ChangeLog中有提到ARBackgroundRenderer已经在某个版本重命名为ARCameraBackground,AR/VR开发可能须要熟悉一下相关的Package,以下图:
感谢羽飞@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。固然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,咱们早已在UWA问答网站上准备了更多的技术话题等你一块儿来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官方技术QQ群:793972859(原群已满员)