当前位置:   article > 正文

Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView_unity 两个image中间特效

unity 两个image中间特效

ui上面展示粒子一般来说有两种方案
1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好,多个摄像机
2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插多,层级不好管理,且多canvas造成合批问题
现在来第三种方法粒子BakeMesh(要2018.2以上版本)
来自Github:https://github.com/mob-sakai/ParticleEffectForUGUI
优点:可像UGUI一样通过上下调整层级排序,接受Mask处理

各方案比较

在这里插入图片描述

粒子BakeMesh

原理:直接让粒子的网格和贴图在ui基础组件里面渲染
使用接口
ParticleSystemRenderer.BakeMesh和ParticleSystemRenderer.BakeTrailsMesh这里是生成网格信息
CanvasRenderer.SetMesh
CanvasRenderer.SetTexture
mesh和texture扔给canvasRenderer渲染

代码解析

UIParticle

UIParticle 是粒子的父物体

[RequireComponent(typeof(RectTransform))]
 [RequireComponent(typeof(CanvasRenderer))]
public class UIParticle : MaskableGraphic
{
protected override void OnEnable()
        {
            UIParticleUpdater.Register(this);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

CanvasRenderer渲染包含在Canvas中的UI对象,是一个Graphic必须的

UIParticleUpdater

Canvas.willRenderCanvases监听

internal static class UIParticleUpdater
    {
        [RuntimeInitializeOnLoadMethod]
        private static void InitializeOnLoad()
        {
            Canvas.willRenderCanvases -= Refresh;
            Canvas.willRenderCanvases += Refresh;
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Q: Canvas.willRenderCanvases监听
A:官方解释:在即将开始 Canvas 渲染前调用的事件。
这让您能够延时处理/更新基于画布的元素,直到即将开始渲染它们之时。在这里做生成粒子的Mesh,再通过调用particle.canvasRenderer.SetMesh,渲染粒子的mesh
Refresh

private static void Refresh(UIParticle particle)
        {
            Profiler.BeginSample("[UIParticle] Bake mesh");
            BakeMesh(particle);
            Profiler.EndSample();

           Profiler.BeginSample("[UIParticle] Set mesh to CanvasRenderer");
            particle.canvasRenderer.SetMesh(particle.bakedMesh);
            Profiler.EndSample();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

请添加图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号