【unity插件】UGUI的粒子效果(UI粒子)—— Particle Effect For UGUI (UI Particle)

文章目录

  • 前言
  • 插件地址
  • 描述
  • 特征
  • Demo 演示
  • 如何玩演示
    • 对于 Unity 2019.1 或更高版本
    • 对于 Unity 2018.4 或更早版本
  • 用法
  • 基本上是用法
  • 使用您现有的 ParticleSystem 预制件
  • 带 Mask 或 RectMask2D 组件
  • 脚本用法
  • UIParticleAttractor 组件
  • 开发说明
    • 常见问题解答:为什么我的粒子效果无法正确显示?
  • 着色器限制
    • 建议使用 UI 着色器。
    • 不支持内置着色器
    • (2019.4 或更早版本)UV.zw 组件将被丢弃
    • (2019.4 或更早版本)自定义顶点流
  • 开销
  • 如何制作自定义着色器以支持 Mask/RectMask2D 组件
  • 完结

前言

该插件使用新的 APIMeshBake/MashTrailBake(随 Unity 2018.2 添加)通过 CanvasRenderer 渲染粒子。您可以在没有 Camera、RenderTexture、Canvas 的情况下为 UGUI 屏蔽和排序粒子。

插件地址

https://github.com/mob-sakai/ParticleEffectForUGUI

描述

在这里插入图片描述

此插件使用新的 API MeshBake/MashTrailBake (随 Unity 2018.2 添加)通过 CanvasRenderer 渲染粒子。您可以在没有 Camera、RenderTexture、Canvas 的情况下为 uGUI 遮罩和排序粒子。

将这种“烤网”方法与传统方法进行比较:

方法截屏
Baking mesh(UIParticle)按原样呈现。可屏蔽。排序。更少的对象。不支持自定义顶点流 TEXCOORD*.zw 的组件在这里插入图片描述
Do nothing按原样呈现。看起来像一个小故障。不可屏蔽。不可排序。在这里插入图片描述
Convert particle to UIVertex(UIParticleSystem)可屏蔽。可排序。更少的对象。调整是困难的。需要 UI 着色器。难以调整比例。强制分层缩放。模拟结果不正确。不支持跟踪、变换旋转、时间缩放。每帧生成大量 GC。在这里插入图片描述
Use Canvas to sort按原样呈现。可排序。您必须管理分拣订单。不可屏蔽。更多批次。在这里插入图片描述
Use RenderTexture可屏蔽。可排序。需要 Camera 和 RenderTexture。难以调整位置和大小。质量取决于 RenderTexture 的设置。在这里插入图片描述
方法编辑器上的 FPSiPhone6上的FPSXperia XZ上的FPS
Particle System435722
UIParticleSystem430(不可测量)
Sorting By Canvas434418
UIParticle17124
UIParticle with MeshSharing444530

特征

  • 易于使用:包装开箱即用

  • 按同级索引对粒子效果和 UI 进行排序

  • 不需要 Camera、RenderTexture 或 Canvas

  • 通过 Mask 或 RectMask2D 遮罩

  • 支持 Trail 模块

  • 支持 CanvasGroup alpha

  • 没有分配

  • 支持叠加、相机空间和世界空间

  • 支持通用渲染管线 (URP) 和高清渲染管线 (HDRP)

  • 支持禁用 Enter Play Mode Options > Reload Domain

  • 支持使用 AnimationClip (AnimatableProperty) 更改材质属性
    在这里插入图片描述

  • [4.0.0+]支持8+材质

  • [4.0.0+]更改独立平台(Windows、MacOSX 和 Linux)的窗口大小时,正确世界空间粒子位置

  • [4.0.0+]UI 的自适应缩放

  • [4.0.0+]网格共享组以提高性能
    在这里插入图片描述

  • [4.0.0+]粒子吸引子组件
    在这里插入图片描述

  • [4.1.0+]相对/绝对粒子位置模式
    在这里插入图片描述

Demo 演示

WebGL Demo WebGL 演示
在这里插入图片描述

WebGL 演示(卡通特效和战争特效)
在这里插入图片描述

如何玩演示

对于 Unity 2019.1 或更高版本

1.打开 Package Manager 窗口
2.在包列表中选择 UI Particle 包
3.点击 Import Sample 按钮
在这里插入图片描述
4.演示项目被导入到 Assets/Samples/UI Particle/{version}/Demo
5.打开 UIParticle_Demo 场景并播放

对于 Unity 2018.4 或更早版本

1.从菜单中选择 Assets/Samples/UI Particle Demo
2.演示项目被导入到 Assets/Samples/UI Particle/{version}/Demo
3.打开 UIParticle_Demo 场景并播放

用法

UIParticle 组件
UIParticle 控制附加到其自己的游戏对象和子游戏对象的 ParticleSystems。
在这里插入图片描述

性能描述
Maskable此图形是否允许遮罩。
Scale缩放渲染。启用切换后 3D ,支持 3D 比例 (x,y,z)。
Animatable Properties如果要在 AnimationClip 中更新材质属性(例如 _MainTex_ST 、 _Color ),请使用它来标记更改。
Mesh Sharing粒子模拟结果在同一组内共享。在很小的负载下可以显示大量相同的效果。启用 Random 切换后,它将随机分组。
Position ModeAbsolute(绝对):从 ParticleSystem . 的世界位置发出。Relative(相对):从 ParticleSystem .
Auto ScalingTransform.lossyScale(=世界比例)将在更新 (1, 1, 1) 时设置为。它可以防止 root-Canvas 缩放影响层次结构缩放 ParticleSystem 。
Rendering Order要呈现的 ParticleSystem 列表。您可以更改顺序和材料。

注意: 按下 Refresh 按钮可根据子 ParticleSystem 的排序顺序和 z 位置重建渲染顺序。

基本上是用法

1.选择此选项 Game Object/UI/ParticleSystem 可创建具有 ParticleSystem 的 UIParticle。
在这里插入图片描述
2.根据需要调整 ParticleSystem。
在这里插入图片描述

使用您现有的 ParticleSystem 预制件

1.选择以 Game Object/UI/ParticleSystem (Empty) 创建 UIParticle。
在这里插入图片描述
2.将 ParticleSystem 预制件拖放到 UIParticle 上。
在这里插入图片描述

带 Mask 或 RectMask2D 组件

如果要遮罩粒子,请将支持模板的着色器(例如 UI/UIAdditive )设置为 ParticleSystem 的材质。如果使用某些自定义着色器,请参阅如何创建自定义着色器以支持 Mask/RectMask2D 组件部分。
在这里插入图片描述

脚本用法

// Instant ParticleSystem prefab with UIParticle on runtime.
var go = GameObject.Instantiate(prefab);
var uiParticle = go.AddComponent<UIParticle>();

// Control by ParticleSystem.
particleSystem.Play();
particleSystem.Emit(10);

// Control by UIParticle.
uiParticle.Play();
uiParticle.Stop();

UIParticleAttractor 组件

UIParticleAttractor 吸引由指定的 ParticleSystem 生成的粒子。
在这里插入图片描述
在这里插入图片描述

性能描述
Particle System吸引由指定粒子系统生成的粒子。
Distination Radius一旦粒子在半径内,粒子生存期将变为 0 并被 OnAttracted 调用。
Delay Rate延迟开始吸引。它是粒子起始寿命的百分比。
Max Speed最大吸引速度。如果此值太小,则吸引可能无法在生存期结束时完成,并且 OnAttracted 可能不会被调用。
Movement吸引运动类型。(线性、平滑、球面)
Update Mode正常(Normal):使用缩放的增量时间进行更新。未缩放时间(Unscaled Time):使用未缩放的增量时间进行更新。
OnAttracted吸引完成时调用的事件(每个粒子)。

开发说明

常见问题解答:为什么我的粒子效果无法正确显示?

如果 ParticleSystem 单独显示粒子但 UIParticle 不能正确显示,请检查以下几点:

  • 着色器限制
    • 大多数情况可以通过使用 UI/Additive 或 UI/Default 来解决。
  • 颗粒被遮蔽
    • UIParticle 是可屏蔽的。
    • 正确设置 Mask 或 RectMask2D 组件。
  • 颗粒太小
    • 如果粒子足够小,它们就不会出现在屏幕上。
    • 增加 Scale 值。
    • 如果您不想根据分辨率更改表观大小,请尝试 Auto Scaling 选项。
  • 颗粒太多
    • 最多可显示 65535 个顶点(对于网格组合限制)。
    • 请正确设置 Emission 模块和 Max Particles ParticleSystem。
  • 粒子在屏幕外发射。
    • 当 Position Mode = Relative 时,粒子是从 ParticleSystem 的缩放位置发射的,而不是从 ParticleSystem 的屏幕点发射的。
    • 将 ParticleSystem 放置在适当的位置或尝试 Position Mode = Absolute .
  • UIParticle 附加到与 ParticleSystem
    • Transform.localScale 将被 Auto Scaling 选项覆盖。
    • 建议放在 ParticleSystem UIParticle .

着色器限制

建议使用 UI 着色器。

  • 如果需要简单的加性着色器,请改用着 UI/Additive 色器。
  • 如果您需要一个简单的 alpha 混合着色器,请改用着 UI/Default 色器。
  • 如果自定义着色器无法与 UIParticle 配合使用,请考虑创建自定义 UI 着色器。

不支持内置着色器

UIParticle 不支持除 UI/Default .
如果检测到它们的使用,检查器中会显示错误。
请改用 UI 着色器。

(2019.4 或更早版本)UV.zw 组件将被丢弃

UIParticleRenderer 基于 UIVertex 渲染粒子。
因此,着色器中的每个 UV 只有 xy 分量可用。(ZW 组件将被丢弃)。
因此,不幸的是,UIP文章不能很好地与某些着色器一起使用。

(2019.4 或更早版本)自定义顶点流

使用自定义顶点流时,可以用“不必要的”数据填充 zw 组件。

开销

UIParticle 有一些开销,批处理取决于 uGUI。
提高性能时,请记住以下几点:

  • 如果要显示大量相同的效果,请考虑 Mesh Sharing UIParticle 组件中的功能。
    • 如果您不喜欢统一的输出,请考虑 Random Group 功能。
      在这里插入图片描述
  • 如果您使用多种材质,您将有更多的绘制调用。
    • 考虑单个材质、图集精灵,并在 ParticleSystem Texture Sheet Animation 的模块中使用 Sprite 模式。

如何制作自定义着色器以支持 Mask/RectMask2D 组件

着色器提示

Shader "Your/Custom/Shader"
{
    Properties
    {
        // ...
        // #### required for Mask ####
        _StencilComp ("Stencil Comparison", Float) = 8
        _Stencil ("Stencil ID", Float) = 0
        _StencilOp ("Stencil Operation", Float) = 0
        _StencilWriteMask ("Stencil Write Mask", Float) = 255
        _StencilReadMask ("Stencil Read Mask", Float) = 255
        _ColorMask ("Color Mask", Float) = 15
        [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
    }

    SubShader
    {
        Tags
        {
            // ...
        }

        // #### required for Mask ####
        Stencil
        {
            Ref [_Stencil]
            Comp [_StencilComp]
            Pass [_StencilOp]
            ReadMask [_StencilReadMask]
            WriteMask [_StencilWriteMask]
        }
        ColorMask [_ColorMask]
        // ...

        Pass
        {
            // ...
            // #### required for RectMask2D ####
            #include "UnityUI.cginc"
            #pragma multi_compile __ UNITY_UI_CLIP_RECT
            float4 _ClipRect;

            // #### required for Mask ####
            #pragma multi_compile __ UNITY_UI_ALPHACLIP

            struct appdata_t
            {
                // ...
            };

            struct v2f
            {
                // ...
                // #### required for RectMask2D ####
                float4 worldPosition    : TEXCOORD1;
            };
            
            v2f vert(appdata_t v)
            {
                v2f OUT;
                // ...
                // #### required for RectMask2D ####
                OUT.worldPosition = v.vertex;
                return OUT;
            }

            fixed4 frag(v2f IN) : SV_Target
            {
                // ...
                // #### required for RectMask2D ####
                #ifdef UNITY_UI_CLIP_RECT
                    color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
                #endif

                // #### required for Mask ####
                #ifdef UNITY_UI_ALPHACLIP
                    clip (color.a - 0.001);
                #endif

                return color;
            }
            ENDCG
        }
    }
}

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL--MHA高可用

MHA相关知识 1.什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件MHA 的出现就是解决MySQL 单点故障的问题。目的&#xff1a;MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。MH…

Vue3:父组件向子组件传值(Props)

背景 在Vue3项目里&#xff0c;页面A&#xff08;在views文件夹里&#xff09;需要读取某个接口的数据&#xff0c;而页面A引入的组件a&#xff08;在components文件夹里&#xff09;也需要读取该接口的数据为了避免重复读取数据从而造成资源浪费&#xff0c;可以利用传值来实…

YOLO目标检测——苹果缺陷检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;苹果质量检测和自动化分拣系统数据集说明&#xff1a;苹果缺陷检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有缺陷图片和没缺陷图片。标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量…

快速掌握华为VRP系统的CLI管理技巧,让你轻松玩转命令行!

华为VRP基础 基本概述 VRP(通用路由平台) 系统软件&#xff1a;.cc 配置文件&#xff1a;.cfg,.zip,.dat 补丁文件&#xff1a;.pat paf文件&#xff1a;.bin 设备初始化&#xff1a; 设备管理方式&#xff1a; WEB网管&#xff1a;配置与设备同网段IP地址&#xff0c;使用浏览…

发疯买了200片51,我能做点什么?

发疯买了200片51&#xff0c;我能做点什么? 对于电子元件我喜欢以5个作为一个基数&#xff0c;因为考虑的焊接失误&#xff0c;烧冒烟等等因素&#xff0c;5个芯片也足以出一套方案样机。有时候遇到网上芯片做活动&#xff0c;也会屯一点&#xff0c;一般不超过4个基数。pcb和…

Django(五、视图层)

文章目录 一、视图层1.视图函数返回值的问题2.三板斧的使用结论&#xff1a;在视图文件中写视图函数的时候不能没有返回值&#xff0c;默认返回的是None&#xff0c;但是页面上会报错&#xff0c;用来处理请求的视图函数都必须返回httpResponse对象。 二、JsonReponse序列化类的…

Elasticsearch 面试题

文章目录 Elasticsearch 读取数据您能解释一下 X-Pack for Elasticsearch 的功能和重要性吗&#xff1f;Elasticsearch 中的节点&#xff08;比如共 20 个&#xff09;&#xff0c;其中的 10 个选了 一个master&#xff0c;另外 10 个选了另一个 master&#xff0c;怎么办&…

信息系统项目管理师(第四版)教材精读思维导图-第十五章到二十四章

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 ​ 思维导图源文件下载链接&#xff1a; 十五章风险管理 十六章采购管理 十七章干系人管理…

2023年【陕西省安全员C证】新版试题及陕西省安全员C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年陕西省安全员C证新版试题为正在备考陕西省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员C证考试试卷祝您顺利通过陕西省安全员C证考试。 1、【多选题】下列关于安全帽&#xf…

【数据结构 | 链表】leetcode 2. 两数相加

个人主页&#xff1a;兜里游客棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里游客棉花糖 原创 收录于专栏【LeetCode】 原题链接&#xff1a;点击直接跳转到该题目 目录 题目描述解题代码 题目描述 给你两个 非空 的链表&#xff0c;表示两个非…

【Python3】【力扣题】263. 丑数

【力扣题】题目描述&#xff1a; 此题&#xff1a;正整数n&#xff0c;能被2或3或5整除&#xff0c;且不断除以2或3或5最终的数是1。 【Python3】代码&#xff1a; 1、解题思路&#xff1a;递归。 知识点&#xff1a;递归&#xff1a;函数中调用函数自身&#xff08;必须有退…

解决:element ui表格表头自定义输入框单元格el-input不能输入问题

表格表头如图所示&#xff0c;有 40-45&#xff0c;45-50 数据&#xff0c;且以输入框形式呈现&#xff0c;现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入&#xff0c;部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…

【左程云算法全讲10】打表技巧和矩阵处理技巧

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…

【LeetCode刷题-双指针】--80.删除有序数组中的重复项II

80.删除有序数组中的重复项II 方法&#xff1a;双指针 因为给定数组是有序的&#xff0c;所以相同元素必然连续&#xff0c;使用双指针解决&#xff0c;遍历数组检查每一个元素是否应该被保留&#xff0c;如果应该保留&#xff0c;就将其移动到指定位置。我们定义两个指针slow…

Python实现扫雷游戏,代码示例,边玩边学+回忆童年!

文章目录 前言实现总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 扫雷是一款益智类小游戏&#xff0…

使用vue2实现todolist待办事项

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

解密N数之和问题的秘密

目录 两数之和三数之和 两数之和 我们来看力扣第一题 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

【MATLAB源码-第76期】基于matlab的OCDM系统在AWGN信道下理论误码率和实际误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 正交线性调频分频复用&#xff08;OCDM&#xff0c;Orthogonal Chirp Division Multiplexing&#xff09;是一种无线通信技术&#xff0c;它基于啁啾信号的原理。啁啾信号是一种频率随时间变化的信号&#xff0c;通常频率是线…

【Java】集合(三)Map

1.Map 接口实现类的特点 1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value 2)Map 中的 key 和 value 可以是任何引用类型的数据&#xff0c;会封装到HashMap$Node对象中 3)Map 中的 key 不允许重复 4)Map 中的 value 可以重复 5)Map 的key 可以为 null,va…

执行力太差的人,如何才能提高执行力?

执行力是计划的落地执行&#xff0c;是按照计划稳步推进&#xff0c;导向结果的能力。不同的人&#xff0c;其执行力有很大的差别。比如说有拖延症的人&#xff0c;基本上是谈不上执行力的&#xff0c;执行力是一个综合体&#xff0c;是多个要素的共同作用。 在企业HR人才测评…