Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
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);
CanvasRenderer渲染包含在Canvas中的UI对象,是一个Graphic必须的
UIParticleUpdater
Canvas.willRenderCanvases监听
internal static class UIParticleUpdater { [RuntimeInitializeOnLoadMethod] private static void InitializeOnLoad() { Canvas.willRenderCanvases -= Refresh; Canvas.willRenderCanvases += Refresh; }
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(); }
posted on 2022-03-27 11:18 luoyikun 阅读(170) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)