Files
aibis-dream/Assets/Scripts/Framework/OtherKit/CameraKit.cs
T
2024-12-25 22:21:44 +08:00

93 lines
2.9 KiB
C#

using System.Collections;
using AibisDream.Kit;
using DG.Tweening;
using UnityEngine;
using Yarn.Unity;
namespace AibisDream.Framework
{
public class CameraKit : SingletonBase<CameraKit>
{
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);
}
}
}