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; } } }