12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- /// <summary>
- /// 被攻击闪光
- /// </summary>
- public class BeAttackFlash : MonoBehaviour
- {
- private List<Shader> mOldShaders = new List<Shader>();
- private SkinnedMeshRenderer[] mRenders = null;
- /// <summary>
- /// 闪烁中
- /// </summary>
- private bool mFlashing = false;
- /// <summary>
- /// 时间
- /// </summary>
- private float mTime = 0;
- /// <summary>
- /// 闪烁
- /// </summary>
- 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<SkinnedMeshRenderer>();
- 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));
- }
- }
- }
- /// <summary>
- /// 恢复默认Shader
- /// </summary>
- 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;
- }
- }
- }
|