曲阜官方建设局网站,龙岩兼职招聘最新发布,广宁县住房建设局网站,先做产品网站还是appNGUI与Unity3D物体渲染顺序问题#xff0c;做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。
由于UI与特效等都是以transparent方式渲染#xff0c;而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知#xff0…NGUI与Unity3D物体渲染顺序问题做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。
由于UI与特效等都是以transparent方式渲染而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知于是引出排序问题。现在介绍以render queue值来达到使得UI、特效按照我们希望的顺序进行渲染的目的。
这里先说明一下关于设置UI的draw call的细节也是最繁琐的部分。我们知道NGUI会将采用同样材质的widget合并到同一个draw call中进行渲染。然而在我们这个需求中这一功能导致了无法在widget之间插入其它渲染队列的问题也就是原始的三明治问题。如果只是涉及到UI控件之间的穿插NGUI可以通过depth设置来解决
如果是使用同一材质的多个控件设置了不同的depth值则NGUI还是将这些控件合并为同一个draw call 如果设置了不同depth的多个控件穿插使用了不同的材质则NGUI会将其打散为不同的draw call顺序即按照depth指定。
在 Unity 中material.renderQueue 是用于设置材质的渲染队列Render Queue的属性。渲染队列是用于控制渲染顺序的机制它决定了对象在渲染管线中的绘制顺序从而影响了它们在场景中的渲染顺序。
每个材质都有一个关联的渲染队列决定了材质将在渲染管线的哪个阶段进行渲染。较小的渲染队列值表示对象将在渲染管线的早期渲染而较大的渲染队列值表示对象将在渲染管线的后期渲染。
可以使用 material.renderQueue 属性来设置材质的渲染队列。通常情况下这可以用于控制材质的渲染顺序以解决透明对象的渲染问题确保它们正确地在不同的深度顺序中渲染。
using UnityEngine;public class RenderQueueExample : MonoBehaviour
{public Material customMaterial;public int customRenderQueue 3000; // 设置自定义渲染队列值private void Start(){if (customMaterial ! null){customMaterial.renderQueue customRenderQueue; // 设置材质的渲染队列值}}
}customMaterial 是一个材质球可以通过在 Unity 编辑器中将其分配给该脚本的公共字段。然后您可以使用 customMaterial.renderQueue 属性来设置材质的渲染队列值。
优缺点
使用 material.renderQueue 来控制材质的渲染队列具有一些好处和潜在的坏处这取决于项目的需求和使用情况。
好处
解决透明对象的深度排序问题 当场景中有多个透明对象重叠时它们的渲染顺序对于正确显示是至关重要的。通过调整不同材质的渲染队列您可以确保透明对象在正确的顺序中渲染避免了深度排序问题。
实现特定渲染顺序 有时您可能希望特定的对象在渲染管线中的某个阶段进行渲染例如在天空盒渲染之后或之前。通过设置渲染队列您可以控制对象的渲染顺序以满足您的需求。
定制渲染效果 一些渲染效果可能需要对象以特定的顺序进行渲染。通过设置渲染队列您可以实现定制的渲染效果如描边、发光等。
坏处
增加复杂性 使用渲染队列可能会增加项目的复杂性特别是当需要精细地调整渲染顺序时。过多的渲染队列调整可能会使项目难以维护。甚至可能多个UI或者物体公用了一个材质但是不同场景下显示的位置不一致
潜在的渲染问题 不正确地设置渲染队列可能会导致渲染问题如对象闪烁z_fightong、深度冲突等。调整渲染队列时需要小心确保在实际渲染中没有问题。
可能不适用于所有情况 并非所有项目都需要显式控制渲染队列。一些项目中的默认渲染顺序可能已经足够满足需求不需要额外的调整。调整Z轴可能是更好的解决方式
综上所述使用 material.renderQueue 可以在某些情况下解决渲染顺序的问题但在使用时需要谨慎。在进行渲染队列的调整时最好测试并仔细观察渲染结果以确保达到预期的效果。
后续我会补充图片说明