PortalsController.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PortalsController : MonoBehaviour
  5. {
  6. public PortalsController targetPortal; //传送目标
  7. public List<Rigidbody> rbs = new List<Rigidbody>(); //通过当前传送门的单位
  8. public float TransmitCD; //每个单位传送的CD
  9. public bool isReverse; //传送门朝向是否相反
  10. public bool onlyEnemy; //是否只能传送敌人
  11. private void OnTriggerEnter(Collider other)
  12. {
  13. //传送主角、使魔、敌人
  14. BeSearchTrigger beSearchTrigger = other.GetComponent<BeSearchTrigger>();
  15. if (beSearchTrigger != null)
  16. {
  17. Rigidbody rb = beSearchTrigger.GetComponentInParent<Rigidbody>();
  18. if(rb.tag == "Demonic")
  19. {
  20. return;
  21. }
  22. if(rb.tag == "Player" && onlyEnemy)
  23. {
  24. return;
  25. }
  26. if (Transmit(rb))
  27. {
  28. MoveCharacter moveCharacter = rb.GetComponent<MoveCharacter>();
  29. if (moveCharacter != null)
  30. {
  31. moveCharacter.portalsController = this;
  32. moveCharacter.transmitTime = TransmitCD;
  33. moveCharacter.haveTransmit = true;
  34. }
  35. }
  36. return;
  37. }
  38. //传送子弹
  39. Bullet bullet = other.GetComponent<Bullet>();
  40. if(bullet != null && bullet.canTransmit)
  41. {
  42. Rigidbody rb = bullet.GetComponentInParent<Rigidbody>();
  43. if (Transmit(rb))
  44. {
  45. bullet.portalsController = this;
  46. bullet.transmitTime = TransmitCD;
  47. bullet.haveTransmit = true;
  48. }
  49. return;
  50. }
  51. //传送魂
  52. Soul soul = other.GetComponent<Soul>();
  53. if(soul != null)
  54. {
  55. Rigidbody rb = soul.GetComponent<Rigidbody>();
  56. if (Transmit(rb))
  57. {
  58. soul.portalsController = this;
  59. soul.transmitTime = TransmitCD;
  60. soul.haveTransmit = true;
  61. }
  62. return;
  63. }
  64. }
  65. //传送
  66. public bool Transmit(Rigidbody rb)
  67. {
  68. if (!targetPortal.rbs.Exists(t => t == rb))
  69. {
  70. if (!rbs.Exists(t => t == rb))
  71. {
  72. if ((transform.parent.localScale.x > 0 && rb.velocity.x > 0) ||
  73. (transform.parent.localScale.x < 0 && rb.velocity.x < 0))
  74. {
  75. rbs.Add(rb);
  76. Vector3 targetPos = targetPortal.transform.position;
  77. if (targetPortal.transform.parent.localScale.x > 0)
  78. {
  79. targetPos.x -= 1;
  80. }
  81. else
  82. {
  83. targetPos.x += 1;
  84. }
  85. targetPos.y += rb.transform.position.y - transform.position.y;
  86. rb.transform.position = targetPos;
  87. if (!isReverse)
  88. {
  89. Vector3 velocity = rb.velocity;
  90. velocity.x = -velocity.x;
  91. rb.velocity = velocity;
  92. }
  93. return true;
  94. }
  95. }
  96. }
  97. return false;
  98. }
  99. }