相信点到这里进来的老哥们,八成也是遇到了我这样的问题:
美术做了一个特效,这个特效可能是粒子,也可能是一个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。