CameraMgr.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using DG.Tweening;
  2. using ET.EventType;
  3. using FairyGUI;
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. using UnityEngine.Playables;
  7. namespace ET.Client
  8. {
  9. public static class CameraMgr
  10. {
  11. public static Camera MainCamera { get; private set; }
  12. private static Dictionary<string, UnityEngine.Object> Name_BindObj = new Dictionary<string, UnityEngine.Object>();
  13. private static PlayableDirector Director;
  14. private static readonly string StartPlayableName = "Camera02";
  15. private static System.Action StopCallback = null;
  16. public static void Init()
  17. {
  18. MainCamera = Camera.main;
  19. MainCamera.transform.SetPositionAndRotation(new Vector3(90, 35, 26.6f), Quaternion.Euler(20, 20, 0));
  20. MainCamera.fieldOfView = 60;
  21. var light = GameObject.Find("/Light");
  22. light.transform.rotation = Quaternion.Euler(0, 20, 0);
  23. if (Director == null)
  24. {
  25. Director = MainCamera.GetComponent<PlayableDirector>();
  26. if (Director == null)
  27. {
  28. Log.Error("Not Found Camera PlayableDirector");
  29. return;
  30. }
  31. if (Name_BindObj.Count == 0)
  32. {
  33. foreach (var bind in Director.playableAsset.outputs)
  34. {
  35. var obj = Director.GetGenericBinding(bind.sourceObject);
  36. Name_BindObj.Add(bind.streamName, obj);
  37. }
  38. }
  39. Director.stopped += (pd) =>
  40. {
  41. StopCallback?.Invoke();
  42. StopCallback = null;
  43. };
  44. }
  45. }
  46. [Event]
  47. public class CameraPlaybleEventHandler : BEvent<CameraPlaybleEvent>
  48. {
  49. protected override async ETTask OnEvent(CameraPlaybleEvent a)
  50. {
  51. bool flag = GlobalViewMgr.Instance.HeadbarView.visible;
  52. if (flag)
  53. {
  54. GlobalViewMgr.Instance.HeadbarView.visible = false;
  55. }
  56. await PlayTimeline(a.Playable, () =>
  57. {
  58. if (flag)
  59. {
  60. GlobalViewMgr.Instance.HeadbarView.visible = true;
  61. }
  62. if (a.Playable == "Camera1_2")
  63. {
  64. var light = GameObject.Find("/Light");
  65. light.transform.rotation = Quaternion.Euler(0, 225, 0);
  66. EventSystem.Instance.Publish(BattleFunc.Clone((int)BattleFunc.FUNC.Start2));
  67. }
  68. else if (a.Playable == "Camera2_3")
  69. {
  70. var light = GameObject.Find("/Light");
  71. light.transform.rotation = Quaternion.Euler(0, 178, 0);
  72. EventSystem.Instance.Publish(BattleFunc.Clone((int)BattleFunc.FUNC.Start3));
  73. }
  74. });
  75. }
  76. }
  77. public static async ETTask PlayTimeline(string timeline, System.Action cb)
  78. {
  79. var task = await YooAssetProxy.LoadAssetAsync<PlayableAsset>($"Playable_{timeline}");
  80. var asset = task.GetAssetObject<PlayableAsset>();
  81. Director.playableAsset = asset;
  82. foreach (var bind in asset.outputs)
  83. {
  84. if (Name_BindObj.TryGetValue(bind.streamName.ToString(), out var bindObj))
  85. {
  86. Director.SetGenericBinding(bind.sourceObject, bindObj);
  87. }
  88. }
  89. StopCallback = cb;
  90. Director.Play();
  91. }
  92. public static async ETTask PlayStartAnimation(System.Action cb)
  93. {
  94. await PlayTimeline(StartPlayableName, cb);
  95. }
  96. //相机跟随主角
  97. public static void FollowMe(Vector3 pos)
  98. {
  99. /*var camera = Camera.main;
  100. pos.x += 7;
  101. pos.y = 15;
  102. pos.z -= 25;
  103. camera.transform.position = pos;*/
  104. }
  105. private static bool bShaking = false;
  106. public static void ShakeMe(float shakeTime, Vector3 shakeStength)
  107. {
  108. if (bShaking) return;
  109. bShaking = true;
  110. Transform trans = MainCamera.transform;
  111. var savePos = trans.localPosition;
  112. Tweener tweener = trans.DOShakePosition(shakeTime, shakeStength);
  113. tweener.OnComplete<Tweener>(() =>
  114. {
  115. trans.localPosition = savePos;
  116. bShaking = false;
  117. });
  118. }
  119. public static Vector3 CarmeraPos()
  120. {
  121. return Camera.main.transform.position;
  122. }
  123. public static void DragMe(Vector3 start, Vector3 end, float duration, System.Action endcb)
  124. {
  125. Transform trans = MainCamera.transform;
  126. trans.position = start;
  127. var tweener = trans.DOMove(end, duration);
  128. tweener.OnComplete<Tweener>(() =>
  129. {
  130. endcb ?.Invoke();
  131. });
  132. }
  133. }
  134. [Event]
  135. public class CameraEventHandler : BEvent<CameraEvent>
  136. {
  137. protected override async ETTask OnEvent(CameraEvent args)
  138. {
  139. var endpos = new Vector3(args.X, args.Y, args.Z);
  140. float time = (float)args.TimeMS / 1000;
  141. Transform trans = CameraMgr.MainCamera.transform;
  142. if (args.MoveSpeedSec > 0.0001 && time < 0.01)
  143. {
  144. var dis = Vector3.Distance(trans.position, endpos);
  145. time = dis / args.MoveSpeedSec;
  146. }
  147. trans.DOMove(endpos, time);
  148. await ETTask.CompletedTask;
  149. }
  150. }
  151. }