[Unity]代码改变材质强度实现闪烁效果
程序员文章站
2022-06-10 23:26:49
...
材质球的Shader为 Unity自带的Standard
颜色都是白色(FFFFFF)
代码改变emission intensity的值实现闪烁效果
代码中的_emissionColorValue的alpha透明值 不能使得闪烁 透明。
Inspector视图 改变 材质球 Rendering Mode为transparent或Cutout或Fade,MainMaps的Albedo设置图片并且颜色的Alpha值不能过大或过小,才能看到透明材质。
材质的Emission不勾选,就不会有效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MATERAILINTENSITY : MonoBehaviour
{
/// <summary>
/// 闪烁材质球
/// </summary>
public Material haloMaterial;
/// <summary>
/// 材质 颜色 包含 alpha透明值,闪烁颜色
/// </summary>
public Color _emissionColorValue;
/// <summary>
/// 材质强度 期望值
/// </summary>
public float desiredValue = 0.5F;
/// <summary>
/// 材质强度 当前值
/// </summary>
public float _intensity = 0.5F;
/// <summary>
/// update 每帧 改变值
/// </summary>
public float decrease = 0.005F;
/// <summary>
/// 闪烁方向 1 为 从0-0.5方向,-1为0.5-0方向
/// </summary>
private int dir = 1;
private void Start()
{
haloMaterial.SetVector("_EmissionColor", _emissionColorValue * 0f);
_intensity = 0;
}
// Update is called once per frame
void Update()
{
haloMaterial.SetVector("_EmissionColor", _emissionColorValue * _intensity);
/*_intensity = _intensity - decrease;
if (Input.GetKey(KeyCode.S))
{
_intensity = desiredValue;
//_intensity-=0.1F;
}
if (_intensity < 0)
{
_intensity = 0.5F;
}*/
if (dir == 1)
{
_intensity = _intensity + decrease;
if (_intensity > desiredValue)
{
dir = -1;
}
}
else if (dir == -1)
{
_intensity = _intensity - decrease;
if (_intensity < 0)//-0.1f
{
dir = 1;
}
}
}//
}//https://forum.unity.com/threads/change-a-materials-emission-color-intensity-property.611206/
材质球-Inspector-Emission勾选-Color为0,0,0,不要选择其他颜色或者点击,出错了,重新新建材质球 重新设置。
如果材质球不闪烁在Project视图下点击一下。
或者是Emission勾选,Global Illumination为Realtime或none,而不是Baked。
上一篇: revit API 生成墙图元