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

本文介绍了一种在Unity中让特效(如粒子系统或MeshRender)在UI中正确显示层级的方法。通过创建一个特殊的Camera并配合RawImage及RenderTexture使用,能够实现在特定UI元素之上或之下的特效渲染,并提供了Shader修改方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

美术做了一个特效,这个特效可能是粒子,也可能是一个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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级摸鱼选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值