文章目录

  • 一、前言
  • 二、最终效果
  • 三、使用方法
    • 1、引入插件dll
    • 2、制作粒子特效
    • 3、粒子材质球使用UIAdditive.shader
    • 4、将粒子摆放在UI节点下
    • 5、挂UIParticle组件
    • 6、Mask蒙版
  • 四、运行效果
  • 五、结束语
  • 六、附录:UIAdditive.shader源码

一、前言

点关注不迷路,持续输出Unity干货文章。
嗨,大家好,我是新发。
我们在游戏中,可能需要在UI界面中穿插显示粒子特效。
然而当我们在UI上挂粒子,效果却是这样的:

有好几个问题:
1 粒子的层级有问题,我们希望可以很方便且稳定地设置粒子与UI的层级关系;
2 粒子无法被ScrollView裁切,我们希望粒子可以像UI元素一样被ScrollView裁切;
3 粒子无法使用Mask蒙版,我们希望可以使用Mask蒙版来显示粒子特效。
今天,就统统解决掉。

二、最终效果


本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。
地址:https://codechina.csdn.net/linxinfa/ParticleEffectForUGUI
注:我使用的Unity版本:Unity 2020.1.14f1c1 (64-bit)
另:本文的效果,需要Unity 2018.2+版本以上才可以。

三、使用方法

1、引入插件dll

本文使用了一个插件:Coffee.UIParticle,只需将其dll放到对应目录中即可:
Coffee.UIParticle.Editor.dll放在Editor目录中;
Coffee.UIParticle.dll放在Plugins目录中;

2、制作粒子特效

根据需求制作你的粒子特效。

3、粒子材质球使用UIAdditive.shader

粒子使用的材质球的shader使用UIAdditive.shader

UIAdditive.shader源码见文章末尾附录。

4、将粒子摆放在UI节点下

粒子特效作为UI的子节点,如下。
根据UGUI的渲染顺序规则,Front Image (Unity-chan)节点因为在粒子特效的下面,所以Front Image (Unity-chan)会显示在粒子特效的上层。

5、挂UIParticle组件

给粒子的父节点挂上UIParticle组件。

通过UIParticle组件可以调整一些属性:

6、Mask蒙版

如果开启了Maskable,只需要给粒子所在的Image父节点挂上Mask组件即可。

四、运行效果

运行Unity,效果如下,粒子特效的渲染与常规的UI对象规则一致,粒子可以被ScrollView裁切,也支持Mask蒙版过滤。

五、结束语

完毕。
喜欢Unity``的同学,不要忘记点击关注,如果有什么Unity```相关的技术难题,也欢迎留言或私信~

六、附录:UIAdditive.shader源码

Shader "UI/Additive"
{Properties{_MainTex ("Sprite Texture", 2D) = "white" {}_Color ("Tint", Color) = (1,1,1,1)_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_ClipRect ("Clip Rect", Vector) = (-32767, -32767, 32767, 32767)}SubShader{Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane""CanUseSpriteAtlas"="True"}Stencil{Ref [_Stencil]Comp [_StencilComp]Pass [_StencilOp] ReadMask [_StencilReadMask]WriteMask [_StencilWriteMask]}Cull OffLighting OffZWrite OffZTest [unity_GUIZTestMode]Fog { Mode Off }Blend One OneColorMask [_ColorMask]Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "UnityUI.cginc"struct appdata_t{float4 vertex   : POSITION;float4 color    : COLOR;float2 texcoord : TEXCOORD0;};struct v2f{float4 vertex   : SV_POSITION;fixed4 color : COLOR;half2 texcoord  : TEXCOORD0;float4 worldPosition : TEXCOORD1;};fixed4 _Color;sampler2D _MainTex;float4 _MainTex_ST;float4 _ClipRect;v2f vert(appdata_t IN){v2f OUT;OUT.worldPosition = IN.vertex;OUT.vertex = UnityObjectToClipPos(IN.vertex);OUT.texcoord = TRANSFORM_TEX(IN.texcoord, _MainTex);
#ifdef UNITY_HALF_TEXEL_OFFSETOUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
#endifOUT.color = IN.color * _Color;return OUT;}fixed4 frag(v2f IN) : SV_Target{half4 color = tex2D(_MainTex, IN.texcoord) * IN.color;color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);color.rgb *= color.a;
#ifdef UNITY_UI_ALPHACLIPclip (color.a - 0.01);
#endifreturn color;}ENDCG}}
}

【游戏开发实战】Unity粒子在UI界面中的裁切、蒙版、层级问题的解决(ScrollView裁切、Mask蒙版、UI粒子层级关系)相关推荐

  1. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  2. 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...

  3. 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)

    文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...

  4. 【游戏开发实战】教你在Unity中实现模型消融化为灰烬飘散的效果(ShaderGraph | 消融 | 粒子系统 | 特效)

    文章目录 一.前言 二.ShaderGraph环境准备 三.模型准备:原神角色模型 四.实现思路 1.效果一的实现思路 2.效果二的实现思路 五.ShaderGraph具体实现 1.效果一 1.1.创 ...

  5. 《Unity 2D与3D手机游戏开发实战》简介

    #好书推荐##好书奇遇季#<Unity 2D与3D手机游戏开发实战>,京东当当天猫都有发售.彩色印制,定价89元,网店打折销售更便宜.本书配套源码.PPT课件,适合Unity游戏开发初学者 ...

  6. 《Unity 5.x游戏开发实战》一1.9 添加一个水平面

    本节书摘来异步社区<Unity 5.x游戏开发实战>一书中的第1章,第1.9节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区"异步社 ...

  7. 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计

    [Unity]动作游戏开发实战详细分析-07-连续技与组合技功能设计 基本思路 在一些动作游戏中,存在着连续技这一功能,具体来说就是连续按下规定的按键会触发能力的功能,或者是长按触发等等. 实现解析 ...

  8. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

    [Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...

  9. 【Unity】动作游戏开发实战详细分析-06-技能系统设计

    [Unity]动作游戏开发实战详细分析-06-技能系统设计 基本思想 不同的技能可以设计为技能模版,当角色释放技能时,会通过模版ID将它进行实例化,这个实例技能类可以是一个挂载的MonoBehavio ...

最新文章

  1. Python 能做什么?
  2. 基于HttpClient的HttpUtils(后台访问URL)
  3. mysql高效索引之覆盖索引
  4. 如何修改DeDe标签Pagelist分页样式详解
  5. 《Java 高并发》05 线程的基本操作
  6. React-Native视频组件react-native-video使用(安卓版)
  7. rk3128屏幕占空比参数设置_瑞芯微RK3128芯片怎么样 性能全面解读
  8. CJSON之完全基于C库函数的使用
  9. Modelsim调用用do脚本自动化仿真
  10. MySQL四种事务隔离级的说明
  11. AHP权重计算方法案例
  12. KNN——简单手写体识别
  13. 使用EndNote对Word论文的参考文献进行管理
  14. Java browsing
  15. 手把手教你用MATLAB制作一款 [狗头翻牌子] 小游戏(点灯游戏)
  16. VMware Workstation威睿工作站详解
  17. PhotoZoom Pro 7怎么进行参数设置
  18. Linux性能优化——stress压力测试工具
  19. 卡尔曼滤波与组合导航原理_基于RAEKF的GPS/INS紧组合导航方法研究
  20. 从“爱豆”到“榜样”,超级星饭团给你更多正能量

热门文章

  1. UE4 texture streaming poor over 预算上的纹理流送池 红字 解决方法总结。
  2. fluent-ffmpeg图片合成视频(一)
  3. 银行理财、保险、证券销售双录系统解决方案
  4. 当电子工程师十余年,感慨万千!
  5. Shiro系列(三)--- Shiro身份验证和授权
  6. 关于Unix与Linux的一段暗黑史(上篇)
  7. Unity模型动作操作
  8. c#操作excel方式二:采用OleDB操作Excel文件
  9. ASP.NET程序设计教程1---第一个ASP.NET程序
  10. 图像处理//FastStoneCapture——截屏软件,一个就够了