SoulBoom.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class SoulBoom : MonoBehaviour
  5. {
  6. [HideInInspector]
  7. public float time; //当前时间
  8. public float boomTime; //爆炸开始炸的时间
  9. [HideInInspector]
  10. public bool isBoom; //是否已经炸过了
  11. public AttackInfo attackInfo; //damage造成伤害、force爆炸力的大小、repel value韧性值减值,其余的参数没用到
  12. public float destroyTime; //消失时间
  13. public List<MoveCharacter> characters = new List<MoveCharacter>(); //被炸到的对象
  14. public bool canHitTower; //也对塔造成伤害
  15. private bool isInVain; //击中光球,攻击无效
  16. public Character owner;
  17. private void Update()
  18. {
  19. time += Time.deltaTime;
  20. if (time >= boomTime)
  21. {
  22. //造成伤害的瞬间
  23. if (time < boomTime + 0.1)
  24. {
  25. GetComponent<Collider>().enabled = true;
  26. }
  27. else
  28. {
  29. if (!isBoom)
  30. {
  31. for (int i = 0; i < characters.Count; i++)
  32. {
  33. if (characters[i].state == CharacterState.Die)
  34. {
  35. continue;
  36. }
  37. PlayerController playerController =
  38. characters[i].GetComponent<PlayerController>();
  39. if (playerController != null && playerController.isBaseBtnOut)
  40. {
  41. continue;
  42. }
  43. Vector3 target;
  44. Vector3 pos1 = characters[i].transform.position;
  45. Vector3 pos2 = transform.position;
  46. target = (pos1 - pos2).normalized;
  47. characters[i].BeHit
  48. (attackInfo.damage, target * attackInfo.force, true, attackInfo.repelValue);
  49. }
  50. isBoom = true;
  51. GetComponent<Collider>().enabled = false;
  52. }
  53. }
  54. }
  55. if (time >= destroyTime)
  56. {
  57. time = 0;
  58. isBoom = false;
  59. characters = new List<MoveCharacter>();
  60. gameObject.SetActive(false);
  61. }
  62. }
  63. private void OnTriggerEnter(Collider other)
  64. {
  65. Photosphere photosphere = other.GetComponentInParent<Photosphere>();
  66. if (photosphere)
  67. {
  68. isInVain = true;
  69. photosphere.Reflex(owner.beHitTrigger, attackInfo.damage);
  70. return;
  71. }
  72. BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
  73. if (beHitTrigger != null)
  74. {
  75. if(beHitTrigger.owner.tag == "Demonic" || beHitTrigger.owner.tag == "Player")
  76. {
  77. if (beHitTrigger.owner.tag == "Player" && isInVain)
  78. {
  79. return;
  80. }
  81. MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
  82. if (character.rb == null)
  83. {
  84. character = character.transform.parent.GetComponent<MoveCharacter>();
  85. }
  86. if (!characters.Exists(t => t == character))
  87. {
  88. characters.Add(character);
  89. }
  90. }
  91. Tower tower = other.GetComponentInParent<Tower>();
  92. if (canHitTower && tower != null)
  93. {
  94. tower.BeHit(attackInfo.damage, attackInfo.force* Vector3.zero,attackInfo.changeHurt,attackInfo.repelValue);
  95. }
  96. }
  97. }
  98. private void OnTriggerExit(Collider other)
  99. {
  100. BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
  101. if (beHitTrigger != null
  102. && (beHitTrigger.owner.tag == "Demonic" || beHitTrigger.owner.tag == "Player"))
  103. {
  104. MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
  105. if (characters.Exists(t => t == character))
  106. {
  107. characters.Remove(character);
  108. }
  109. }
  110. }
  111. }