using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class AutoRoaming : MonoBehaviour { /// /// 是否自动漫游 /// public bool autoRoaming; /// /// 自动漫游旋转轴 /// 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); } /// /// 开始漫游 /// /// /// 开始漫游后回调 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(); }); } /// /// /// ///是否重置角度 /// ///重置角度后回调 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(); }); } } }