BeAttackFlash.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// 被攻击闪光
  6. /// </summary>
  7. public class BeAttackFlash : MonoBehaviour
  8. {
  9. private List<Shader> mOldShaders = new List<Shader>();
  10. private SkinnedMeshRenderer[] mRenders = null;
  11. /// <summary>
  12. /// 闪烁中
  13. /// </summary>
  14. private bool mFlashing = false;
  15. /// <summary>
  16. /// 时间
  17. /// </summary>
  18. private float mTime = 0;
  19. /// <summary>
  20. /// 闪烁
  21. /// </summary>
  22. public void Flash(float time = 0.3f, float r = 1.0f, float g = 0.1f, float b = 0.1f)
  23. {
  24. mTime = time;
  25. if (mFlashing)
  26. {
  27. return;
  28. }
  29. mFlashing = true;
  30. if (mRenders == null || mRenders.Length == 0)
  31. {
  32. mRenders = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
  33. for (int i = 0; i < mRenders.Length; i++)
  34. {
  35. mOldShaders.Add(mRenders[i].material.shader);
  36. mRenders[i].material.shader = Shader.Find("Battle/BeAttackFlashColor");
  37. mRenders[i].material.SetColor("_FlashColor", new Color(r, g, b));
  38. }
  39. }
  40. else
  41. {
  42. for (int i = 0; i < mRenders.Length; i++)
  43. {
  44. mRenders[i].material.shader = Shader.Find("Battle/BeAttackFlashColor");
  45. mRenders[i].material.SetColor("_FlashColor", new Color(r, g, b));
  46. }
  47. }
  48. }
  49. /// <summary>
  50. /// 恢复默认Shader
  51. /// </summary>
  52. public void ResetShader()
  53. {
  54. for (int i = 0; i < mRenders.Length; i++)
  55. {
  56. mRenders[i].material.shader = mOldShaders[i];
  57. }
  58. }
  59. // Update is called once per frame
  60. void Update()
  61. {
  62. if (mFlashing == false)
  63. {
  64. return;
  65. }
  66. mTime -= Time.deltaTime;
  67. if (mTime <= 0)
  68. {
  69. ResetShader();
  70. mFlashing = false;
  71. }
  72. }
  73. }