using System.Collections; using AibisDream.Kit; using DG.Tweening; using UnityEngine; using Yarn.Unity; namespace AibisDream.Framework { public class CameraKit : SingletonBase { private readonly Camera _mainCamera = Camera.main; private Vector3 _initPos; private float _initOrthographicSize; private CameraKit() { } public override void OnSingletonInit() { // 无需初始化 _initPos = _mainCamera.transform.position; _initOrthographicSize = _mainCamera.orthographicSize; } public void ResetCamara() { _mainCamera.transform.position = _initPos; _mainCamera.orthographicSize = _initOrthographicSize; } public Tween TransCamera(Vector3 targetPos, float targetOrthographicSize, float duration) { var sq = DOTween.Sequence(); // 移动 sq.Join(_mainCamera.transform.DOMove(targetPos, duration)); // 缩放 sq.Join(_mainCamera.DOOrthoSize(targetOrthographicSize, duration)); return sq; } public Tween ReturnInitCamera(float duration) { return TransCamera(_initPos, _initOrthographicSize, duration); } public Tween TransCamera(Vector3 targetPos, float duration) { return _mainCamera.transform.DOMove(targetPos, duration); } public IEnumerator TransCameraAsync(Vector3 targetPos, float duration) { var targetOrthographicSize = _mainCamera.orthographicSize; yield return TransCameraAsync(targetPos, targetOrthographicSize, duration); } public IEnumerator TransCameraAsync(Vector3 targetPos, float targetOrthographicSize, float duration) { yield return TransCamera(targetPos, targetOrthographicSize, duration).WaitForCompletion(); } public IEnumerator ReturnInitCameraAsync(float duration) { return TransCameraAsync(_initPos, _initOrthographicSize, duration); } } public static class CameraCommand { [YarnCommand("return_init_camera")] public static IEnumerator ReturnInitCamera(float duration = 1f) { return CameraKit.Instance.ReturnInitCameraAsync(duration); } [YarnCommand("trans_camera")] public static IEnumerator TransCameraAsync(float x, float y, float targetOrthographicSize, float duration) { Vector3 targetPos = new Vector3(x, y, -10); return CameraKit.Instance.TransCameraAsync(targetPos, targetOrthographicSize, duration); } [YarnCommand("trans_camera_pos")] public static IEnumerator TransCameraAsync(float x, float y, float duration) { Vector3 targetPos = new Vector3(x, y, -10); return CameraKit.Instance.TransCameraAsync(targetPos, duration); } } }