【游戏开发实战】Unity粒子在UI界面中的裁切、蒙版、层级问题的解决(ScrollView裁切、Mask蒙版、UI粒子层级关系)
文章目录
- 一、前言
- 二、最终效果
- 三、使用方法
- 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粒子层级关系)相关推荐
- 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)
文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...
- 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)
文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...
- 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)
文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...
- 【游戏开发实战】教你在Unity中实现模型消融化为灰烬飘散的效果(ShaderGraph | 消融 | 粒子系统 | 特效)
文章目录 一.前言 二.ShaderGraph环境准备 三.模型准备:原神角色模型 四.实现思路 1.效果一的实现思路 2.效果二的实现思路 五.ShaderGraph具体实现 1.效果一 1.1.创 ...
- 《Unity 2D与3D手机游戏开发实战》简介
#好书推荐##好书奇遇季#<Unity 2D与3D手机游戏开发实战>,京东当当天猫都有发售.彩色印制,定价89元,网店打折销售更便宜.本书配套源码.PPT课件,适合Unity游戏开发初学者 ...
- 《Unity 5.x游戏开发实战》一1.9 添加一个水平面
本节书摘来异步社区<Unity 5.x游戏开发实战>一书中的第1章,第1.9节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区"异步社 ...
- 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计
[Unity]动作游戏开发实战详细分析-07-连续技与组合技功能设计 基本思路 在一些动作游戏中,存在着连续技这一功能,具体来说就是连续按下规定的按键会触发能力的功能,或者是长按触发等等. 实现解析 ...
- 【Unity】动作游戏开发实战详细分析-16-敌人AI设计
[Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...
- 【Unity】动作游戏开发实战详细分析-06-技能系统设计
[Unity]动作游戏开发实战详细分析-06-技能系统设计 基本思想 不同的技能可以设计为技能模版,当角色释放技能时,会通过模版ID将它进行实例化,这个实例技能类可以是一个挂载的MonoBehavio ...
最新文章
- Python 能做什么?
- 基于HttpClient的HttpUtils(后台访问URL)
- mysql高效索引之覆盖索引
- 如何修改DeDe标签Pagelist分页样式详解
- 《Java 高并发》05 线程的基本操作
- React-Native视频组件react-native-video使用(安卓版)
- rk3128屏幕占空比参数设置_瑞芯微RK3128芯片怎么样 性能全面解读
- CJSON之完全基于C库函数的使用
- Modelsim调用用do脚本自动化仿真
- MySQL四种事务隔离级的说明
- AHP权重计算方法案例
- KNN——简单手写体识别
- 使用EndNote对Word论文的参考文献进行管理
- Java browsing
- 手把手教你用MATLAB制作一款 [狗头翻牌子] 小游戏(点灯游戏)
- VMware Workstation威睿工作站详解
- PhotoZoom Pro 7怎么进行参数设置
- Linux性能优化——stress压力测试工具
- 卡尔曼滤波与组合导航原理_基于RAEKF的GPS/INS紧组合导航方法研究
- 从“爱豆”到“榜样”,超级星饭团给你更多正能量
热门文章
- UE4 texture streaming poor over 预算上的纹理流送池 红字 解决方法总结。
- fluent-ffmpeg图片合成视频(一)
- 银行理财、保险、证券销售双录系统解决方案
- 当电子工程师十余年,感慨万千!
- Shiro系列(三)--- Shiro身份验证和授权
- 关于Unix与Linux的一段暗黑史(上篇)
- Unity模型动作操作
- c#操作excel方式二:采用OleDB操作Excel文件
- ASP.NET程序设计教程1---第一个ASP.NET程序
- 图像处理//FastStoneCapture——截屏软件,一个就够了