using DG.Tweening; using ET.EventType; using UnityEngine; namespace ET.Client { public static class CameraMgr { public static void Init() { var camera = GlobalViewMgr.Instance.BattleCamera; camera.transform.SetPositionAndRotation(new Vector3(70, 50, 0), Quaternion.Euler(35, 0, 0)); camera.fieldOfView = 60; } //相机跟随主角 public static void FollowMe(Vector3 pos) { /*var camera = Camera.main; pos.x += 7; pos.y = 15; pos.z -= 25; camera.transform.position = pos;*/ } private static bool bShaking = false; public static void ShakeMe(float shakeTime, Vector3 shakeStength) { if (bShaking) return; bShaking = true; Transform trans = GlobalViewMgr.Instance.BattleCamera.transform; var savePos = trans.localPosition; Tweener tweener = trans.DOShakePosition(shakeTime, shakeStength); tweener.OnComplete<Tweener>(() => { trans.localPosition = savePos; bShaking = false; }); } public static Vector3 CarmeraPos() { return Camera.main.transform.position; } public static void DragMe(Vector3 start, Vector3 end, float duration, System.Action endcb) { Transform trans = GlobalViewMgr.Instance.BattleCamera.transform; trans.position = start; var tweener = trans.DOMove(end, duration); tweener.OnComplete<Tweener>(() => { endcb ?.Invoke(); }); } } [Event] public class CameraEventHandler : BEvent<CameraEvent> { protected override async ETTask OnEvent(CameraEvent args) { var endpos = new Vector3(args.X, args.Y, args.Z); float time = (float)args.TimeMS / 1000; Transform trans = GlobalViewMgr.Instance.BattleCamera.transform; if (args.MoveSpeedSec > 0.0001 && time < 0.01) { var dis = Vector3.Distance(trans.position, endpos); time = dis / args.MoveSpeedSec; } trans.DOMove(endpos, time); await ETTask.CompletedTask; } } }