using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 被攻击闪光
///
public class BeAttackFlash : MonoBehaviour
{
private List mOldShaders = new List();
private SkinnedMeshRenderer[] mRenders = null;
///
/// 闪烁中
///
private bool mFlashing = false;
///
/// 时间
///
private float mTime = 0;
///
/// 闪烁
///
public void Flash(float time = 0.3f, float r = 1.0f, float g = 0.1f, float b = 0.1f)
{
mTime = time;
if (mFlashing)
{
return;
}
mFlashing = true;
if (mRenders == null || mRenders.Length == 0)
{
mRenders = gameObject.GetComponentsInChildren();
for (int i = 0; i < mRenders.Length; i++)
{
mOldShaders.Add(mRenders[i].material.shader);
mRenders[i].material.shader = Shader.Find("Battle/BeAttackFlashColor");
mRenders[i].material.SetColor("_FlashColor", new Color(r, g, b));
}
}
else
{
for (int i = 0; i < mRenders.Length; i++)
{
mRenders[i].material.shader = Shader.Find("Battle/BeAttackFlashColor");
mRenders[i].material.SetColor("_FlashColor", new Color(r, g, b));
}
}
}
///
/// 恢复默认Shader
///
public void ResetShader()
{
for (int i = 0; i < mRenders.Length; i++)
{
mRenders[i].material.shader = mOldShaders[i];
}
}
// Update is called once per frame
void Update()
{
if (mFlashing == false)
{
return;
}
mTime -= Time.deltaTime;
if (mTime <= 0)
{
ResetShader();
mFlashing = false;
}
}
}