欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity动态改变材质球Alpha值的一些方法

程序员文章站 2022-06-10 21:01:19
...

要做物体的渐隐渐现,一般都是调材质球,当然,也可以不用代码,创建个动画状态机,直接K帧,也可以做到渐隐渐现效果。如果是代码的话,如下咯:

using UnityEngine;
using DG.Tweening;

/*
 * 
 *  Writer:June
 * 
 *  Date: 2020.6.3
 * 
 *  Function:更改材质球的渲染层级,并渐渐消失
 * 
 *  Remarks:注意,要先导入动画插件——DoTween
 * 
 */


public class JuneMaterial : MonoBehaviour 
{
    /// <summary>
    /// 物体材质球
    /// </summary>
    private Material material;
    /// <summary>
    /// 消失时间
    /// </summary>
    public float fadeTime = 1f;


    private void Start()
    {
        material = GetComponent<MeshRenderer>().material;
        //当渲染层级不是3000的时候,将其设为3000
        if (material.renderQueue != 3000)
        {
            material.SetFloat("_Mode", 3);
            material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            material.SetInt("_ZWrite", 0);
            material.DisableKeyword("_ALPHATEST_ON");
            material.EnableKeyword("_ALPHABLEND_ON");
            material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
            material.renderQueue = 3000;
        }
        //材质球颜色的alpha值改变
        //注意:如果你的材质球没有Color的,会报没有_Color属性的错...
        material.DOColor(new Color(1, 1, 1, 0), fadeTime);
    }


}

不过这样可能有些模型会出现问题,就比如的一切换渲染层级的时候,整个模型都好像透视那样。

我是这样解决的:新建个材质球,先让材质球做alpha值从1->0的动画,再把材质球赋值给目标模型,这样也可以到达渐渐消失的效果。

相关标签: 笔记 unity