[Unity]UGUI和特效MeshRender渲染层级问题

相信点到这里进来的老哥们,八成也是遇到了我这样的问题:

美术做了一个特效,这个特效可能是粒子,也可能是一个MeshRender。然后策划想让这个特效显示在Image A上面,Image B下面。

就是要各种穿插,那么要如何解决这个穿插层级问题呢。

废话不多说,此处用到了知乎某大佬的解决方案。

先看效果图:

这里RawImage用来渲染特效,可以很完美的利用UGUI自己的层级关系,显示在Image A上面,Image B下面。

原理不做赘述,主要用到了Raw Image和Camera的Target Texture,大概实现流程如下:

1.Camera和Render Texture

新建一个Camera和一个Render Texture

Camera设置如下:

划重点:Background的color设置为(0,0,0,0)

然后将需要渲染的特效Effect拖至地图很远处,调整这个Camera,让Camera可以看到这个Effect。

继续画重点:特效用到Alpha Blend的话,因为颜色混合后不能达到我们想要的透明效果,所以需要改一下Unity自带的Alpha Blend的Shader,Unity默认的Shader在官网都可以下到。

然后修改的原理在文章最后有提到。

Render Texture设置如下:

觉得效果不太好的,可以调整Size大小。

2.新建RawImage,将上面的Render Texture拖至RawImage的Texture处

这里划重点:需要修改默认的Shader,以实现透明混合,原理在后面会提及。

3.修改Shader

上面提到的两处需要修改Shader的地方,这里简单贴一下代码。

UI Default:

Alpha Blend:

总结:

用RawImage去渲染我们需要显示的特效,然后利用UGUI自己的层级关系那套逻辑,可以很容易让特效在UI上显示出我们想要的效果。

因为我们特效用到的Shader为Alpha Blend,直接使用RawImage+Render Texture会显示异常,所以修改了Unity自带的Shader,原理和实现方法均来自网上,这里贴一下出处吧。

原理(似乎是这个):http://www.voidcn.com/article/p-tdufpuof-bsc.html

解决方案:https://zhuanlan.zhihu.com/p/110517201

--------------------------------------------------------------------------手动分割线--------------------------------------------------------------------------

2021/4/25

后来有了解到一个之前可能用过但是忘记了的东西,百度可以搜到的:

UIParticleSystem

大概实现应该就是将ParticleSystem绘制成一张2d的图,然后就可以根据UGUI层级去对其进行排序。

有兴趣可以自行研究下。

好处是不需要新建RawImage和Camera、Render Texture。

猜你喜欢

转载自blog.csdn.net/qq302756113/article/details/115552448
今日推荐