CameraMgr.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using DG.Tweening;
  2. using ET.EventType;
  3. using FairyGUI;
  4. using UnityEngine;
  5. using UnityEngine.Playables;
  6. namespace ET.Client
  7. {
  8. public static class CameraMgr
  9. {
  10. public static Camera MainCamera { get; private set; }
  11. public static void Init()
  12. {
  13. MainCamera = Camera.main;
  14. MainCamera.transform.SetPositionAndRotation(new Vector3(230, 35, -5), Quaternion.Euler(20, 0, 0));
  15. MainCamera.fieldOfView = 60;
  16. }
  17. [Event]
  18. public class SceneChangeFinishEvent : BEvent<SceneLoadFinish>
  19. {
  20. protected override async ETTask OnEvent(SceneLoadFinish a)
  21. {
  22. var playable = MainCamera.GetComponent<PlayableDirector>();
  23. if (playable != null)
  24. {
  25. playable.Play();
  26. playable.stopped += (pd) =>
  27. {
  28. var session = PlayerComponent.Instance.ClientScene().GetComponent<SessionComponent>().Session;
  29. session.Call(new C2G_BattleNotify() { Message = BattleNotify.ClientIsReady.ToString() }).Coroutine();
  30. EventSystem.Instance.Publish<ShowHUDEvent>();
  31. GameObject.Destroy(playable);
  32. var ani = MainCamera.GetComponent<Animator>();
  33. if(ani != null) GameObject.Destroy(ani);
  34. };
  35. }
  36. else
  37. {
  38. Log.Error("Not Found Camera PlayableDirector");
  39. EventSystem.Instance.Publish<ShowHUDEvent>();
  40. }
  41. await ETTask.CompletedTask;
  42. }
  43. }
  44. //相机跟随主角
  45. public static void FollowMe(Vector3 pos)
  46. {
  47. /*var camera = Camera.main;
  48. pos.x += 7;
  49. pos.y = 15;
  50. pos.z -= 25;
  51. camera.transform.position = pos;*/
  52. }
  53. private static bool bShaking = false;
  54. public static void ShakeMe(float shakeTime, Vector3 shakeStength)
  55. {
  56. if (bShaking) return;
  57. bShaking = true;
  58. Transform trans = MainCamera.transform;
  59. var savePos = trans.localPosition;
  60. Tweener tweener = trans.DOShakePosition(shakeTime, shakeStength);
  61. tweener.OnComplete<Tweener>(() =>
  62. {
  63. trans.localPosition = savePos;
  64. bShaking = false;
  65. });
  66. }
  67. public static Vector3 CarmeraPos()
  68. {
  69. return Camera.main.transform.position;
  70. }
  71. public static void DragMe(Vector3 start, Vector3 end, float duration, System.Action endcb)
  72. {
  73. Transform trans = MainCamera.transform;
  74. trans.position = start;
  75. var tweener = trans.DOMove(end, duration);
  76. tweener.OnComplete<Tweener>(() =>
  77. {
  78. endcb ?.Invoke();
  79. });
  80. }
  81. }
  82. [Event]
  83. public class CameraEventHandler : BEvent<CameraEvent>
  84. {
  85. protected override async ETTask OnEvent(CameraEvent args)
  86. {
  87. var endpos = new Vector3(args.X, args.Y, args.Z);
  88. float time = (float)args.TimeMS / 1000;
  89. Transform trans = CameraMgr.MainCamera.transform;
  90. if (args.MoveSpeedSec > 0.0001 && time < 0.01)
  91. {
  92. var dis = Vector3.Distance(trans.position, endpos);
  93. time = dis / args.MoveSpeedSec;
  94. }
  95. trans.DOMove(endpos, time);
  96. await ETTask.CompletedTask;
  97. }
  98. }
  99. }