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的动画,再把材质球赋值给目标模型,这样也可以到达渐渐消失的效果。
上一篇: 建材防火等级测试