ict.xunfei/Assets/Scripts/CameraCtrl/AutoRoaming.cs

72 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class AutoRoaming : MonoBehaviour
{
/// <summary>
/// 是否自动漫游
/// </summary>
public bool autoRoaming;
/// <summary>
/// 自动漫游旋转轴
/// </summary>
private Vector3 RotateAng = Vector3.up;
[Range(-10, 10), Tooltip("漫游速度")]
public float roamSpeed = 5;
[Range(0, 1), Tooltip("视角回正速度")]
public float ResetVisualSpeed = 0.5f;
private Vector3 RoamingPosition;
private Vector3 RoamingAngle;
private void Start()
{
RoamingPosition = Camera.main.transform.position;
RoamingAngle = Camera.main.transform.eulerAngles;
}
void LateUpdate()
{
if (autoRoaming)
transform.Rotate(RotateAng * roamSpeed * Time.deltaTime);
}
/// <summary>
/// 开始漫游
/// </summary>
/// <param name="callback"></param>
/// <param name="onStartRoming">开始漫游后回调</param>
public void StartRoam(System.Action callback = null, System.Action onStartRoming = null)
{
if (autoRoaming) return;
callback?.Invoke();
int count = Camera.main.transform.DOKill();
Debug.Log("Kill count: " + count);
Camera.main.transform.DORotate(RoamingAngle, 0.4f);
Camera.main.transform.DOMove(RoamingPosition, 0.4f).OnComplete(() =>
{
autoRoaming = true;
CameraController.instance.SetTransform(RoamingPosition, RoamingAngle);
onStartRoming?.Invoke();
});
}
/// <summary>
///
/// </summary>
///<param name="reset">是否重置角度</param>
///<param name="callback"></param>
///<param name="onStopRoming">重置角度后回调</param>
public void StopRoam(bool reset = false, System.Action callback = null, System.Action onStopRoming = null)
{
if (!autoRoaming) return;
callback?.Invoke();
autoRoaming = false;
if (reset)
{
transform.DORotate(Vector3.zero, ResetVisualSpeed).OnComplete(() => { onStopRoming?.Invoke(); });
}
}
}