JumpToComponent.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System.Threading.Tasks;
  2. using UnityEngine;
  3. namespace WS
  4. {
  5. [ObjectSystem]
  6. public class JumpToComponentLateUpdateSystem : LateUpdateSystem<JumpToComponent>
  7. {
  8. public override void LateUpdate(JumpToComponent self)
  9. {
  10. self.LateUpdate();
  11. }
  12. }
  13. public class JumpToComponent : OperateComponent<JumpToData>
  14. {
  15. private GameObject start;
  16. ///<summary>音频实例</summary>
  17. private VoiceEntity Voice;
  18. public override void Init() { }
  19. public override void StartOperate()
  20. {
  21. if (start == null)
  22. {
  23. start = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/TransferPoint"));
  24. }
  25. Voice = VoiceManager.Instance.Play(VoiceType.Voice, OperateData.audioName);
  26. switch (GameManager.Instance.Data.Pattern)
  27. {
  28. case PatternType.教学:
  29. break;
  30. case PatternType.练习:
  31. break;
  32. case PatternType.考核:
  33. break;
  34. }
  35. start.transform.position = OperateData.startPos;
  36. }
  37. public void LateUpdate()
  38. {
  39. //if (VRInputComponent.Instance.GetKeyUp(VRKey.圆盘, VRHand.Any))
  40. //{
  41. // if (Vector3.Distance(Player.Inst.transform.position, OperateData.startPos) <= 1f)
  42. // {
  43. // Player.Inst.transform.position = OperateData.endPos;
  44. // Player.Inst.transform.rotation = Quaternion.Euler(OperateData.endRot);
  45. // IsComplete = true;
  46. // }
  47. //}
  48. }
  49. public override Task StartState()
  50. {
  51. if (start == null)
  52. {
  53. start = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/TeleportPoint"));
  54. }
  55. start.gameObject.SetActive(true);
  56. Player.Inst.transform.position = OperateData.startPos;
  57. return Task.CompletedTask;
  58. }
  59. public override Task EndState()
  60. {
  61. if (start == null)
  62. {
  63. start = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/TeleportPoint"));
  64. }
  65. start.gameObject.SetActive(false);
  66. Player.Inst.transform.position = OperateData.endPos;
  67. Player.Inst.transform.rotation = Quaternion.Euler(OperateData.endRot);
  68. return Task.CompletedTask;
  69. }
  70. public override void Dispose()
  71. {
  72. if (start != null)
  73. {
  74. GameObject.Destroy(start);
  75. }
  76. base.Dispose();
  77. if (Voice != null)
  78. {
  79. if (!Voice.IsDisposed)
  80. VoiceManager.Instance.Stop(Voice);
  81. Voice = null;
  82. }
  83. }
  84. public override void Update() { }
  85. }
  86. public class JumpToData
  87. {
  88. /// <summary> 起点 </summary>
  89. public Vector3 startPos;
  90. /// <summary> 终点 </summary>
  91. public Vector3 endPos;
  92. /// <summary> 起始旋转 </summary>
  93. public Vector3 startRot;
  94. /// <summary> 终点旋转 </summary>
  95. public Vector3 endRot;
  96. /// <summary> 起点名称 </summary>
  97. public string startName;
  98. /// <summary> 终点名称 </summary>
  99. public string endName;
  100. /// <summary> 音频 </summary>
  101. public string audioName;
  102. }
  103. }