Unity中特效透明度动态设置

这篇具有很好参考价值的文章主要介绍了Unity中特效透明度动态设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在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 frame
    void 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 粒子透明,工具,Unity,C#,unity,游戏引擎,c#

 在其父节点添加即可

unity 粒子透明,工具,Unity,C#,unity,游戏引擎,c#

 文章来源地址https://www.toymoban.com/news/detail-611353.html

到了这里,关于Unity中特效透明度动态设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ObjectArx 设置填充透明度问题

    初始化透明度参数AcCmTransparency对象时,需要调用setAlpha设置透明度值,这里传入的值是0 255,但cad特性面板上显示的是0 90,且经过测试发现,传入值与特性面板显示的值也是不同的,比如传入90,显示64,百度搜索了个寂寞,最后还是在谷歌找到了答案,原来设置的值和特性面

    2024年02月15日
    浏览(54)
  • WPF 控件设置透明度的方法

    方法一:通过 Opacity 属性设置背景色透明度。范围从0-1,0表示完全透明,看不见。     通过 Opacity 属性去改变控件透明度 会影响子控件的透明度,是因为Opacity属性是在UIElement 类(以及Brush基类)中定义,所有元素都具有该属性; 界面如下图图  方法二:通过Background 属性的

    2024年02月11日
    浏览(52)
  • uniapp中map组件打点/地图上显示圆/设置map圆的透明度(十六进制颜色透明度)

    一般来说我们都是想设置成透明的圆,十六进制的后两位表示颜色 eg:#0000006A 6A就是表示透明度,数字越大透明度越高

    2024年02月12日
    浏览(55)
  • VTK————3D模型的旋转、交互、透明度设置

    旋转模型的话可以用到以下例程,但是每次设置选择坐标时,都是累加的。可以通过SetOrientation来将模型方向设为初试方向。如果三个坐标都使用较大值来进行旋转,那么由于累加的特性。模型会在空间内进行大幅度的旋转和位移,这是需要注意的。 也可以通过设置interacto

    2024年02月10日
    浏览(55)
  • Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

    1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材质的属性值获取材质信息) 在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上加入onSetSystemModelMap (设置模型材质方法

    2024年02月13日
    浏览(54)
  • iOS 使用Hex色值设置颜色(可设置透明度使用4个字节色值赋值)

    简单来说就是用十六机制来表示三原色,三原色不同强度组合出不同颜色; 详见:Hex色值是什么(含透明度) iOS不如 Kotlin 有API可直接支持HEX赋值,得自己写个扩展方法 普通无透明度代码如下: 带透明度的代码如下(注意此处解析顺序是RGBA,如仿Kotlin可改为ARGB):

    2024年04月27日
    浏览(40)
  • matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

    1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency? - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码:【找到figure中对应对象并设置属性】 4、结果【同样的轨迹,实影的先运动几个步数,虚影后续运动】    

    2024年02月17日
    浏览(51)
  • 透明度和透明贴图制作玻璃水杯

    模型透明度是指一个物体或模型在呈现时的透明程度。它决定了物体在渲染时,是否显示其后面的物体或背景。 在图形渲染中,透明度通常以0到1之间的值表示。值为0表示完全透明,即物体不可见,背景或其他物体完全穿透;值为1表示完全不透明,即物体完全可见,没有透

    2024年02月07日
    浏览(55)
  • 【CSS 23】颜色 RGBA HSLA 不透明度opacity 线性渐变 径向渐变 透明度渐变 重复渐变

    颜色 CSS 支持 140 多种颜色名称,以及十六进制值、RGB 值、RGBA 值、HSL 值、HSLA 值和不透明度 RGBA颜色 RGBA 颜色值是 RGB 颜色值的扩展,带有 alpha 通道 - 该通道规定颜色的不透明度 RGBA 颜色值是这样规定的:rgba(red, green, blue, alpha) alpha 参数是介于 0.0(完全透明)和 1.0(完全不

    2024年02月13日
    浏览(53)
  • Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)

    最近要实现一个透明的特效,所以更仔细的去学了一下。但是网上更多的是用文字讲解,实验做的相对较少,因此我在这里会更多的附上实验效果展示和结论。若有理解错误的地方,欢迎讨论。 摄像头看向两个Cube,红Cube在前,蓝Cube在后 效果: 解析: 红蓝Cube使用相同的S

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包