在Unity开发中,特效的透明度无法直接使用代码或者动画直接控制很不方便,便制作了一个一个脚本,专用来控制一个节点下的所有子节点的透明度。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;public class UIParticleSystemTweenHelper : MonoBehaviour
{// Start is called before the first frame update[Range(0,1)]public float alpha = 0f;//¼ϴõ͸private float lastAlpha = -1f;private List<ParticleSystemAlpha> colorList = null;void Start(){Init();}private void Init(){colorList = new List<ParticleSystemAlpha>();AddColorData();}public void ForceInit(){Init();}void AddColorData(){ParticleSystemAlpha psa = new ParticleSystemAlpha();if (psa.psr == null){psa.psr = GetComponentsInChildren<ParticleSystemRenderer>(true);float[] tempAlpha_1 = new float[psa.psr.Length];float[] tempAlpha_2 = new float[psa.psr.Length];for (int i = 0; i < psa.psr.Length; i++){if (psa.psr[i].gameObject != null || psa.psr[i].enabled){float temp_alpha = 0;if (psa.psr[i].sharedMaterial && psa.psr[i].sharedMaterial.HasColor("_Color_Water")){temp_alpha = psa.psr[i].sharedMaterial.GetColor("_Color_Water").a;tempAlpha_2[i] = temp_alpha;}if (psa.psr[i].sharedMaterial && psa.psr[i].sharedMaterial.HasColor("_TintColor")){temp_alpha = psa.psr[i].sharedMaterial.GetColor("_TintColor").a;}else if (psa.psr[i].sharedMaterial && psa.psr[i].sharedMaterial.HasColor("_Color")){temp_alpha = psa.psr[i].sharedMaterial.GetColor("_Color").a;}if (temp_alpha >= 1){temp_alpha = 1;}tempAlpha_1[i] = temp_alpha;}}if (psa.alphas_1 == null){psa.alphas_1 = tempAlpha_1;}if (psa.alphas_2 == null){psa.alphas_2 = tempAlpha_2;}}colorList.Add(psa);}private void OnEnable(){Update();}// Update is called once per framevoid Update(){if (alpha <= 0 || colorList.Count == 0 || Mathf.Approximately(lastAlpha, alpha)) return;foreach (ParticleSystemAlpha psa in colorList){ParticleSystemRenderer[] psr = psa.psr;float[] alphas_1 = psa.alphas_1;float[] alphas_2 = psa.alphas_2;for (int i = 0; i < psr.Length; i++){if(psr[i].gameObject != null || psr[i].enabled){if (psa.psr[i].sharedMaterial && psa.psr[i].sharedMaterial.HasColor("_Color_Water")){Color c = psr[i].sharedMaterial.GetColor("_Color_Water");psr[i].sharedMaterial.SetColor("_Color_Water", new Color(c.r, c.g, c.b, alphas_2[i] * alpha));}if (psr[i].sharedMaterial && psr[i].sharedMaterial.HasColor("_TintColor")){Color c = psr[i].sharedMaterial.GetColor("_TintColor");psr[i].sharedMaterial.SetColor("_TintColor", new Color(c.r, c.g, c.b, alphas_1[i] * alpha));}else if (psr[i].sharedMaterial && psr[i].sharedMaterial.HasColor("_Color")){Color c = psr[i].sharedMaterial.GetColor("_Color");psr[i].sharedMaterial.SetColor("_Color", new Color(c.r, c.g, c.b, alphas_1[i] * alpha));}}}}lastAlpha = alpha;}private void OnDestroy(){colorList.Clear();colorList = null;}
}
public class ParticleSystemAlpha
{public ParticleSystemRenderer[] psr = null;public float[] alphas_1 = null;public float[] alphas_2 = null;
}

在其父节点添加即可

Unity中特效透明度动态设置相关推荐

  1. html中的透明度怎么设置,css透明度怎么设置?css中各种透明度的设置方法总结...

    本篇文章给大家介绍一下css中透明度的设置方法,下面我们就来看看具体的内容. 不透明度和透明度 根据定义,CSS中的不透明度和透明度定义了元素的可见性,无论是图像,表格还是RGBA(红绿蓝alpha) ...

  2. 蒙皮骨骼动画 unity_在Unity中沿航路点设置蒙皮网格动画

    蒙皮骨骼动画 unity This post is a guide to importing a skinned mesh with a looping animation and then anim ...

  3. iOS-UITextField中给placeholder动态设置颜色的四种方法

    思路分析: 0.自定义UITextField 1.设置占位文字的颜色找-->placeholderColor,结果发现UITextField没有提供这个属性 2.在storyboard/xib中 ...

  4. unity中连接Xbox手柄设置及按键检测

    首先介绍一下unity输入设置参数所代表的含义 参数名 作用描述 Name 名称 轴的名称,用于游戏加载界面和脚本中. Descriptive Name 描述 游戏加载界面中,轴的正向按键的详细描述. ...

  5. html中视频透明度怎么设置,html图片怎么设置透明度

    html图片设置透明度的方法:首先创建一个div:然后设置一个类名:最后通过"filter:alpha(opacity=50);opacity:0.5;"等属性设置图片透明度即可. ...

  6. AndroidStudio_android中实现图片动态设置图片的位置以及图片动态缩放---Android原生开发工作笔记234

    可以通过下面的代码进行设置 <ImageViewandroid:id="@+id/face_img"android:layout_width="wrap_conte ...

  7. 【Unity】Unity中开场动画设置(二)

    上一篇文章中对Unity中视频的播放设置是在PC端配置的 经过测试后发现并不能在手机端运行 因为在移动设备上我们需要使用另一种方式来播放视频 注意: 在移动端,unity并不提供MovieTextur ...

  8. Unity 角色朝向目标 / 动态转向动画

    Unity 角色朝向目标 / 动态转向动画 一.静态角色转向 1.1 C# 脚本 1.2 Unity 实现 1.3 修改 二.动态角色转向 2.1 C# 脚本 2.2 Unity 实现 写在最最最后 ...

  9. unity重定向_动画重定向技术分析和Unity中的应用

    0. 前言 新的手游项目使用Unity引擎,动画部分要使用重定向技术来实现动画复用.之前在大公司工作的时候对这块了解比较深入,读过Havok引擎在这部分的实现源码,也基于自己的理解在公司自研的手游引擎 ...

最新文章

  1. poi word插入图片_豌豆BI工具看板Word导出技术详解
  2. 中奖名单模板_春分纪中奖名单出炉~才艺主公用“树叶阵法”致敬率土!
  3. 华为智能手环智能手表软件测试,一块智能手表的测试之旅,揭秘华为运动健康科学实验室...
  4. Bootstrap 默认栅格系统
  5. 散粉在哪个步骤用_底妆的正确步骤是什么?花三分钟带你破译底妆密码
  6. 试戴系统完全开放—zoomla!逐浪cms在后4.6时代的又一个亮点
  7. 判断当前环境在微信下,还是企业微信下
  8. 阿里云Web播放器使用
  9. 跟叶子猿学习JVM(二)Java虚拟机内存管理
  10. 计算机实验导论,《计算机科学导论》实验
  11. 保持简单:纪念丹尼斯·里奇
  12. 2020 1月 月末总结
  13. Flink Web UI不能访问
  14. webgl中顶点着色器的varying变量,使用方法。
  15. Android 隐藏虚拟按键
  16. Leetcode 1823 找出游戏的获胜者 (约瑟夫环问题)
  17. VBA将ppt保存为html,ppt2013怎样保存为网页的方法
  18. 关于寄存器ESP和EBP的一些理解
  19. python学习笔记:python类和对象,文件操作,网络编程
  20. 校内网API的.net版本XiaoNei.Net 1.0(非官方)

热门文章

  1. linux下给CPU增加指定百分比的压力
  2. HTTP请求工具类(POST)
  3. 解决卸载CleanMyMac后通知中心仍有通知的问题
  4. 力图搜集各种跟CV,AR相关的代码
  5. 如何看懂Code128条形码
  6. 实时跟踪企业订单执行情况,采购系统助力汽车服务企业缩短采购订单周期
  7. spring项目打包发布详细步骤
  8. 第三方支付客户备付金
  9. Java基础程序——Set集合排序(四种写法)
  10. 如何配置Maven镜像?