UGUI粒子特效与UI层级问题

更新时间:2023-07-28 00:48:40 阅读: 评论:0

UGUI粒⼦特效与UI层级问题
游戏中,界⾯上有些按钮之上需要放置⼀个特效,或者有些区域显⽰⽐如image上显⽰⼀个特效,这时候如果再打开⼀个UI,我们需要让新的UI显⽰在特效上层,⽽不是被特效遮挡,这是就需要设置特效的渲染顺序。best song ever
设置特效的order in layer,新版的unity中,particle system可以直接设置render的order,但是特效中有些是使⽤particle system做的,有些⼜是直接⽤的图像动画等等,⽽类似MeshRender的order in layer是不能在编辑器直接设置的,
所以靠⼿⼯设置是不现实的,需要⽤脚本设置。
代码:
// 深度遍历设置所有 Render 的 SortingLayer
public static void tRenderSortingLayerByActor(GameObject actor, int order, bool isRecursion)
{
if (null != actor)
{
UtilApi.tSpriteRenderSortingLayerByActor(actor, order);
UtilApi.tParticleSystemSortingLayerByActor(actor, order);
UtilApi.tMeshRenderSortingLayerByActor(actor, order);
无论如何的意思int childCount = ansform.childCount;
int idx = 0;
Transform childTrans = null;
if (isRecursion)
{
for (idx = 0; idx < childCount; ++idx)
韩汉互译
{
childTrans = ansform.GetChild(idx);
UtilApi.tRenderSortingLayerByActor(childTrans.gameObject, order, isRecursion);
}
}
}
}
新东方英语培训加盟static public void tSpriteRenderSortingLayerByActor(UnityEngine.GameObject actor, int order)
{
if (null != actor)
{
SpriteRenderer render = null;
render = actor.GetComponent<SpriteRenderer>();
UtilApi.tSpriteRenderSortingLayerBySpriteRenderer(render, order);
}
}
/**
* @brief  unity渲染层级关系⼩结
* @ref blog.csdn/meegomeego/article/details/42060389
*/
// 可以在编辑器中设置
static public void tSpriteRenderSortingLayerBySpriteRenderer(SpriteRenderer render, int order)
hoa
{
if (null != render && render.sortingOrder != order)
{
topicsrender.sortingOrder = order;
}
}
static public void tParticleSystemSortingLayerByActor(UnityEngine.GameObject actor, int order)
男生服饰搭配{
if (null != actor)
{
ParticleSystem particleSystem = null;
particleSystem = actor.GetComponent<ParticleSystem>();
UtilApi.tParticleSystemSortingLayer(particleSystem, order);
}
}
// 不能在编辑器中设置
static public void tParticleSystemSortingLayer(ParticleSystem particleSystem, int order)
{
if (null != particleSystem)
{
Renderer render = particleSystem.GetComponent<Renderer>();
四六级成绩查询入口官网
if (null != render && render.sortingOrder != order)
{
render.sortingOrder = order;
mandatory}
}
}
static public void tMeshRenderSortingLayerByActor(UnityEngine.GameObject actor, int order)
{
if (null != actor)
{
UnityEngine.MeshRenderer meshRenderer = null;
meshRenderer = actor.GetComponent<UnityEngine.MeshRenderer>();
UtilApi.tMeshRenderSortingLayer(meshRenderer, order);
}
}
// 不能在编辑器中设置
static public void tMeshRenderSortingLayer(UnityEngine.MeshRenderer meshRenderer, int order)
{
if (null != meshRenderer && meshRenderer.sortingOrder != order)
{
meshRenderer.sortingOrder = order;
}
}
View Code
使⽤时:UtilApi.tRenderSortingLayerByActor(this.mSelfGo, 1, true);  参数中,this.mSelfGo就是特效实例化的⽗节点,1就是设置的order in layer,因为ui的order默认都是0,所以这个设为1,true循环设置⼦节点
按理说这个order in layer设置为0我觉得应该也是正确的,但在我的游戏中设置为0就⽆法显⽰特效,我确实没有理解。
我的游戏结点如图:
ef_quan2all就是我的特效实例,按照这个顺序应该也是最后渲染的,不明⽩设置为0为何就不显⽰,不知有⼈能否告知。
order in layer设为1后,特效显⽰了,但是后⾯出现了⼀个问题,如果这时打开⼀个其他的UI,特效会遮挡这个UI,坑爹。。
这时就要使出杀⼿锏了,因为UI上类似Image或者Button是⽆法设置order in layer的,所以要给这个被遮挡的UI添加⼀个Canvas,Canvas 可以设置order,那么将其设置为2,⽐特效的⼤,不错,可以显⽰了,但是⼜出现⼀个问题,这个界⾯上的按钮事件被拦截了,擦。。。
map什么意思⼜⼀招出⼿,给其再设置⼀个Graphic Raycster,参数如下
终于完美了。。,既可以显⽰特效,还不会遮挡UI
⾄此有个问题,如果界⾯很多都需要设置上述的canvas,那就需要⾃⼰实现⼀个管理类,给每个ui设置它的order,不过canvas会影响合并批次,所以不能有太多,⾃⼰权衡。

本文发布于:2023-07-28 00:48:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/190782.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设置   需要   渲染   不能   编辑器   问题   遮挡
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图