头图

Unity如何直接获取深度缓冲

1)Unity如何直接获取深度缓冲
​2)Unity Editor下SpriteAtlas加载的问题
3)无法将GameObject从Project窗口拖拽到SceneView窗口
4)UGUI的事件响应问题
5)iOS设置Texture2D的mipMapBias无效


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

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

Rendering

Q:查阅了一些资料,发现Unity获取深度纹理好像都要对每个物体再渲染一次,有什么办法能直接获取到深度缓冲省去这一轮渲染吗?或者直接复制深度缓冲。

A:可以,主要步骤如下:
1.将相机的颜色和深度Buffer通过Camera.SetTargetBuffers重新指向新的RT上(ColorBufferRT、DepthBufferRT);

2.通过CommandBuffer加一个AfterForwardOpaque的事件,将ColorBufferRT、DepthBufferRT Blit渲染到两张新的RT上(后面渲染可以直接使用);

3.通过CommandBuffer加一个AfterEverything的事件,BlitColorBufferRT到CameraTarget上(保证屏幕正确)。

具体细节可参考:https://blog.csdn.net/linjf52...

感谢范世青@UWA问答社区提供了回答

Texture

Q:使用的版本是Unity 2018.3.6f1下,Unity Editor模式下编辑Prefab,图片会加载到内存中。导致一开始运行游戏的时候会触发相关图集SpriteAtlasManager.atlasRequested的提前调用,导致图集加载错误。

上图是过早的图集加载,失败时检测到内存中加载的图片。有没有办法在运行游戏的时候清除编辑预制体时内存中的图片图集?或者类似的办法?

补充:在不运行游戏的情况下调用内存查看的接口,发现内存中仍然有很多图片被加载:

A:这个问题本质是,当引用到Atlas的Sprite加载时,如果内存中没有Atlas,就会触发加载图集的“请求”(atlasRequested)。Editor下编辑Prefab,会生成这个请求,在游戏运行的第一帧,这个请求函数会被调用,而这个请求是由Native层发出的([RequiredByNativeCode]),所以我们没有办法控制,跟卸载内存中的资源是没有关系的。

这个请求也只会在运行时的第一帧进行调用,所以,不要在第一帧注册atlasRequested事件,在第一帧之后,或者在需要加载相应Prefab时注册该函数,就可以避免在启动游戏时调用该函数。

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

Editor

Q:最近发现Unity在打开公司的项目中,无法实现Project窗口拖拽GameObject到SceneView窗口,但是新建一个干净的工程是可以拖拽过去的。猜测是不是因为某个工具或者插件引起的,但是插件和工具太多,逐个排查会比较浪费时间,想问问大佬们有没有遇见过类似的问题?使用的Unity版本是2019.4。

正常的项目从Project窗口拖拽GameObject到SceneView窗口,图标是这样的:

出问题的是这样的:

目前已经注释掉外部工具或者插件的SceneView.duringSceneGui 、DragAndDrop相关代码,问题依然存在。

A:出现问题的原因是:我们重写了GameObject的Editor,没有实现OnSceneDrag函数,不实现这个函数就会导致无法将物体从ProjectWindow拖拽到SceneView。

感谢题主马三小伙儿@UWA问答社区提供了回答

UGUI

Q:UGUI RayCast的无绘制点击在PC上没有问题,但是到安卓手机上就穿透了,没有点击响应的问题。之前用透明通道为0的Image就都没问题。

脚本如下:

A:可以把Image的半透明度设置为0,勾选Canvas Renderer上的Cull Transparent Mesh,这样就可以不进行绘制也能响应点击事件的。(另外,测试了了题主的代码,在小米9上没有出现问题。)

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

Texture

Q:使用TextureMipmapStreaming,在iOS真机上,设置Texture2D的mipMapBias无效,这个Texture是从Material中拿到的mainTexture,在Editor下反而生效(图片会变模糊和清晰)。

版本是Unity2018.4.13,有人遇到同样的问题吗?相关设置见下图:

A:这个要开启Texture.streamingTextureDiscardUnusedMips = true,不然在内存预算足够的情况下,是不会丢弃高精度的贴图的。

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

封面图来源:Multipass Translucency
https://lab.uwa4d.com/lab/5b5...


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

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

UWA官网:[链接]

33 声望
12 粉丝
0 条评论
推荐阅读
URP Shader FrameBuffer Fetch Mali Crash
1)URP Shader FrameBuffer Fetch Mali Crash​2)Unity模型Lightmap UV相关的疑问3)动画上下半身融合问题4)AnimatorControllerPlayable.PrepareFrame函数在什么情况下调用

侑虎科技阅读 53

封面图
发布了新插件,基于editor创作的富文本编辑器
因为项目需要@谁来看的功能,所以根据官方editor二次封装了一个富文本编辑器,想着可能你们希望自己定义编辑器按钮,所以把按钮组件提出来了,你可以自由更换,想着你可能更希望基于api自己设计编辑器,所以把功...

shanjunLi阅读 323

如何在运行时优雅地Reset DOTS
1)如何在运行时优雅地Reset DOTS​2)用顶点着色器进行旋转的Shader放在Image上不能正常工作3)FrameBuffer Fetch在确定支持的手机上显示全紫4)Unity系统中,Android端判断GamePad文件在不在

侑虎科技阅读 278

封面图
Unity升级后打包AssetBundle变慢
1)Unity升级后打包AssetBundle变慢​2)打包使有些资源合成了一个资源data.unity3d,有些分开的原因3)Unreal在移动设备中无法使用Stat命令获取到GPU Thread的耗时4)Unity中如何看到相机视野范围内的剔除结果

侑虎科技阅读 268

封面图
MeshRenderer如何使用GPU Instancing的材质球正常合批
1)MeshRenderer如何使用GPU Instancing的材质球正常合批​2)关于AssetBundle加密,如何重新实现LoadFromFile接口3)移动端开放世界类型游戏中选择动态阴影技术以及优化方案组合4)Unity导出Gradle工程,如何防止...

侑虎科技阅读 252

封面图
SRP合批问题
1)SRP合批问题​2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题3)粒子系统对GPU Instancing的支持4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间)

侑虎科技阅读 239

封面图
获得将要生成的资源的GUID
1)获得将要生成的资源的GUID ​2)多个小资源包合并为大资源包的疑问 3)模型Meta中的hasExtraRoot参数的作用和历史原因 4)合批注意点

侑虎科技阅读 186

封面图

UWA官网:[链接]

33 声望
12 粉丝
宣传栏