版权所有,转载须注明出处!
喜欢火影、喜欢Java、喜欢unity3D、喜欢游戏开发的都可以加入木叶村Q群:379076227

1、前言
在很久很久以前,流传着在NGUI中使用 unity 3D自带粒子系统的方法。
有一种称为RenderQ,另一种称为Render Texture。
然而,或许是随着历史的原因,有些已经逐渐被人们淡忘。使用方法随着应用的条件不同或残缺不全,或效果错误。
我,不相信命运,踏上了找寻遗失秘法的旅途。最后,终于在某一天,遇见了。。。

2、遇见故友
友:来来,刚好见到你,问问你,NGUi中怎么使用粒子?我:不是用代码设置下粒子的RenderQ就可以了吗?
友:那个太简单了,网上都能搜索到,有什么意思的?
我:那使用Render Texture来渲染出一个图片,然后用UITexture来引用也可以吧。
友:我也想到这样,但是不知道为什么摄像机看到的效果和UITexture用了这个Texture之后效果不对。
我:怎么个不对?
友:你看看调试效果和实际运行效果

我:这效果确实不太一样。不过也倒是有另一种美。
友:你给我滚出去
我:于是乎。我就走了。我边走边想。上面的效果图有什么 问题 ?首先,背景是蓝色的。我得先着手解决这个。

那不容易。这个一看就是摄像机的颜色。搞一搞。

我:你看,是不是这个效果。
友:是啊,怎么搞的。
我:把渲染粒子的摄像机的背景颜色改成完全不透明的,然后选择和当前颜色一样。
友:你给我滚出去。。
我:不能这样吗。。为啥不能呢。你看我这样搞。。额。。确实好像不能。。

我:我得再想想。那如果把摄像机的背景调透明呢。

粒子居然完全看不到了。。

3、再重新整理下思绪
显然,不管摄像机的背景是什么颜色,都不能直接把渲染出来的texture放到UITexture上面。
那么我们是否可以自己写个shader。专门用于这种场景。
话不多说,我立马写了“Unlit - Particle”、“Unlit - Particle 1”、“Unlit - Particle 2”、“Unlit - Particle 3”这4个Shader。
这里给出Unlit - Particle的代码,(其他几个的代码在本文最后的项目中有)

[C]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Shader "Unlit/Particle"
{
         Properties
         {
                 _MainTex ( "Base (RGB), Alpha (A)" , 2D) = "black" {}
         }
         
         SubShader
         {
                 LOD 100
                 Tags
                 {
                         "Queue" = "Transparent"
                         "IgnoreProjector" = "True"
                         "RenderType" = "Transparent"
                 }
                 
                 Cull Off
                 Lighting Off
                 ZWrite Off
                 Fog { Mode Off }
                 Offset -1, -1
     Blend One OneMinusSrcAlpha
                 Pass
                 {
                         CGPROGRAM
                         #pragma vertex vert
                         #pragma fragment frag
                                 
                         #include "UnityCG.cginc"
         
                         struct appdata_t
                         {
                                 float4 vertex : POSITION;
                                 float2 texcoord : TEXCOORD0;
                                 fixed4 color : COLOR;
                         };
         
                         struct v2f
                         {
                                 float4 vertex : SV_POSITION;
                                 half2 texcoord : TEXCOORD0;
                                 fixed4 color : COLOR;
                         };
         
                         sampler2D _MainTex;
                         float4 _MainTex_ST;
                                 
                         v2f vert (appdata_t v)
                         {
                                 v2f o;
                                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                                 o.texcoord = v.texcoord;
                                 o.color = v.color;
                                 return o;
                         }
                                 
                         fixed4 frag (v2f i) : COLOR
                         {
                            fixed4 col;
                                  col = tex2D(_MainTex, i.texcoord);
                                  col.a = col.rgb;
                            return col;
                         }
                         ENDCG
                 }
         }
         SubShader
         {
                 LOD 100
                 Tags
                 {
                         "Queue" = "Transparent"
                         "IgnoreProjector" = "True"
                         "RenderType" = "Transparent"
                 }
                 
                 Pass
                 {
                         Cull Off
                         Lighting Off
                         ZWrite Off
                         Fog { Mode Off }
                         Offset -1, -1
                         ColorMask RGB
       Blend One OneMinusSrcAlpha
                         ColorMaterial AmbientAndDiffuse
                         
                         SetTexture [_MainTex]
                         {
                                 Combine Texture * Primary
                         }
                 }
         }
}

最后测试图:

1.png (440.42 KB, 下载次数: 0)

下载附件  保存到相册

15 分钟前 上传

倒数第二列是放在UIPanel中的。最后一列则是放在Softclip的UIPanel中。
有时候可能会出现粒子有黑边的情况。这个情况是因为我们现在用的是渲染图的RGB来算Alpha。因此没办法完全还原真实图像。只能大家根据实际对shader进行调整。这个会根据粒子颜色的不同和背景的不同场景不同结果。
可以想象一下,就像你在Photoshop中,有一张RGB图片。然后你想根据他的灰度扣除图片。是没办法通过算法直接扣除的,只能是人眼的识别去调参数扣。

4、那么最后奉上本文的测试工程。
大家想要把这个应用到自己项目的话,只需要工程中的几个shader

下载地址

[Shader]NGUI与粒子系统相关推荐

  1. [Shader]NGUI与灰化

    1.灰化的需求 很多時候,我们做游戏会遇到一种情况.比如一个技能图标,可以点的时候是正常的颜色,不能点的时候是灰色的.又比如一个功能,开放的时候是正常颜色,没开放的时候是灰色的.更常见的就是,比如你的 ...

  2. 【UnityShader】自定义unity粒子系统使用的shader

    前几天特效那边让改一下一个粒子系统使用的shader,说是shader的一个值希望关联上粒子的某个值. 我不假思索地就准备写个脚本挂上去传个值给shader.等脚本写好,测试的时候才突然发现,传值过去 ...

  3. Unity基础笔记(5)—— Unity渲染基础与动画系统

    Unity渲染基础与动画系统 Unity渲染基础 一.摄像机 1. 摄像机概念 和现实中的摄像机很接近,Unity 中 Camera 组件负责将游戏画面拍摄然后投放到画面上 Camera 拍摄到的画面 ...

  4. OpenGL Compute Shader Particle System计算着色器粒子系统的实例

    OpenGL Compute Shader Particle System计算着色器粒子系统 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include &l ...

  5. NGUI字体贴图压缩以及相关Shader解读

    一般游戏中,字体贴图是游戏贴图压缩的一个重点,特别是对于中文的游戏.考虑的字体贴图的特殊性,一般我们输出的字体贴图是不含颜色信息的,所以正常情况下,我们输出的字体贴图RGBA每一个通道都是一样的.这样 ...

  6. [Shader]对NGUI的UISprite和UITexture进行裁剪

    由于最近比较忙,所以很多我在其它地方发布的博文都没有同步到这里.我会在后面慢慢重新补回来.对各位关注我博客的读者也表示抱歉! 版权所有,转载须注明出处! 喜欢火影.喜欢Java.喜欢unity3D.喜 ...

  7. Unity粒子特效裁剪(基于NGUI的shader裁剪实现)

    这几天总结一下之前遇到的有意思的问题,之前遇到的时候没时间总结,现在就总结一下. 首先说一下关于特效的裁剪应用的场景主要是scrollview中,当scrollview中的物体超出UIPannel的范 ...

  8. unity3d学习笔记(十一)-NGUI结合Shader制作小map

    在做这个demo的过程中,制作小地图着实刁难了我一把,百度了很多文章,花了好长的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,先声明一下,本篇文章将会是这个系列中最难 ...

  9. unity3d学习笔记(十一)--NGUI结合Shader制作小地图

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/12783493 在做这个dem ...

最新文章

  1. 实践出真知:全网最强秒杀系统架构解密!!
  2. Maltego发布新版本4.2.18
  3. VBA编程常用词汇英汉对照表
  4. linux 进程与锁,linux 中的进程与锁
  5. C#LeetCode刷题之#400-第N个数字(Nth Digit)
  6. 华为确定2019年目标:超三星成全球最大智能手机供应商
  7. VMware Horizon7安装-分步指南
  8. 距离Java开发者玩转 Serverless,到底还有多远?
  9. zabbix 邮件报警 监控mysql主从
  10. 计算机与电气工程sci期刊,2019年电气工程领域的英文SCI期刊(影响因子+近年来期刊发表数量)...
  11. Linux查看目录大小——du命令
  12. 修改Mac的提醒声音,这样操作才正确! 调节音量提示音怎么更改?
  13. JavaScript用法------判断二维数组
  14. Aifred、Wox免费开源的效率启动器
  15. Linux的主机名基础
  16. 《月薪5千与月薪5万的文案区别》!如何用立体思维去解决问题
  17. 支持向量机 实战电信运营商 -客户流失预警
  18. JS高级进阶总结day02---面向对象编程三大特征,原型链总结
  19. 2020交通改善与交通安全专辑
  20. excel其中一个页签慢_技巧 | 只需10秒,便可对Excel多页签进行快速有效汇总

热门文章

  1. 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数, 假设每度电的价格为1.2元,计算并显示本月电费。
  2. 微信开发者小程序基础
  3. 系列一、AliyunOSS开通及使用
  4. android 编辑画线,如何在android中用手指在imageview上绘制线条
  5. JustAuth发布1.10.0版本,集成华为和企业微信登录,更加灵活的state缓存
  6. C++堆被破坏 运行时库
  7. C#winform调用接口实例
  8. 时间之“时间波以及时间裂缝说”
  9. 无序列表li去掉标志,文本不根据标记对齐
  10. Django与postgres数据库的基本使用