Bullet.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Base.Common;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public enum BulletType
  6. {
  7. Single = 0,//单体目标,触发后即销毁
  8. Penetrate = 1,//穿透,可击中多个目标
  9. Bomb = 2,//击中目标后爆炸
  10. }
  11. public class Bullet : MonoBehaviour
  12. {
  13. public Character owner;
  14. public Rigidbody rb;
  15. public List<BeHitTrigger> trigedObjs;
  16. public int damage;
  17. public Vector3 force;
  18. public BulletType bulletType;
  19. public bool isGetTarget = false;
  20. public float speed;
  21. private void Awake()
  22. {
  23. //owner = GetComponentInParent<Character>();
  24. rb = GetComponent<Rigidbody>();
  25. }
  26. public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, Vector3 fc)
  27. {
  28. transform.position = shootPos;
  29. transform.right = -dir;
  30. gameObject.SetActive(true);
  31. isGetTarget = false;
  32. owner = own;
  33. damage = dmg;
  34. force = fc;
  35. rb.velocity = dir * speed;
  36. }
  37. private void OnTriggerEnter(Collider other)
  38. {
  39. if (isGetTarget)
  40. {
  41. return;
  42. }
  43. BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
  44. if (hitTrigger != null)
  45. {
  46. bool triged = false;
  47. for (int i = 0; i < trigedObjs.Count; i++)
  48. {
  49. if (trigedObjs[i] == hitTrigger)
  50. {
  51. triged = true;
  52. break;
  53. }
  54. }
  55. if (!triged)
  56. {
  57. trigedObjs.Add(hitTrigger);
  58. if (Util.CheckCanHit(owner.tag, hitTrigger.owner.tag) && !hitTrigger.owner.isDie)
  59. {
  60. switch (bulletType)
  61. {
  62. case BulletType.Single:
  63. hitTrigger.BeHit(damage, force);
  64. isGetTarget = true;
  65. gameObject.SetActive(false);
  66. break;
  67. case BulletType.Penetrate:
  68. hitTrigger.BeHit(damage, force);
  69. break;
  70. case BulletType.Bomb:
  71. break;
  72. default:
  73. break;
  74. }
  75. }
  76. }
  77. }
  78. }
  79. private void OnEnable()
  80. {
  81. trigedObjs.Clear();
  82. }
  83. }