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(原群已满员)

Script

Q:最近我的项目引进几个插件,以及学习他人的插件,代码中用到了unsafe关键字,须要再project settings中勾选Allow unsafe code,之前晓得一点是不勾选最好,然而勾选当前到底哪里不好也忘了,也没有勾选之后上线来验证,所以问问大家,是否应该勾选,以及勾选之后有何影响?

A:勾了没什么实际上的害处,只是因为.net当初设计的时候是不激励应用unsafe代码的,所以在编译器默认设置这个门槛,激励大家尽可能应用平安的代码(也就是不要间接操作原生内存地址)。

然而,很多高性能的C#代码为了最大限度地高效拜访内存,不可避免要用unsafe,只有保障unsafe代码被限度在较小的范畴并严格测试保障不会出内存拜访谬误,对整个工程来说就不是大问题。

感激招文勇@UWA问答社区提供了答复


Texture

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


Script

Q:目前应用TimeScale=0来暂停游戏,然而在UI上不想让特效和动画暂停,而在某些战斗场景,只心愿暂停一部分逻辑。如果把TimeScale=0,就要解决ParticleSystem、TrailRenderer、Spine动画等组件,特地是TrailRenderer和Spine都须要批改源码。如果不必TimeScale=0, 是不是就要在框架层就解决好各模块的更新逻辑?

A1:惯例的做法的确就如你说的,不必TimeScale=0,各个中央去实现暂停,而后对立治理。

感激邓永健@UWA问答社区提供了答复

A2:可参考这篇文章:《Unity Chronos - Time Control 工夫控制器》

感激黄程@UWA问答社区提供了答复


Mono

Q:我的项目采纳了URP,用UWA进行了初步测试,发现RenderPipelineManager.DoRenderLoop_Internal调配了很多堆内存,这个函数是URP中的内置函数吗?应该如何定位问题进行优化?

A:这个函数是内置用于SRP的总函数,不过调配堆内存的很有可能是题主本人写的C#函数。从图中来看,目前堆内存调配的太多了,倡议通过GOT(Online)中的Mono模式来进行测试,就能够看到其具体的堆内存分配情况了。通过“倒序”查看形式,能够间接查看调配的最低级子函数,如下图所示。

以上答复由UWA提供


Editor

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(原群已满员)