乐趣区

关于rendering: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(原群已满员)

退出移动版