using Cinemachine; using UnityEngine; public class ObjectCameraController : MonoBehaviour { [Tooltip("需要旋转的目标物体")] public Transform target; [Tooltip("用于控制的Cinemachine虚拟相机")] public CinemachineVirtualCamera virtualCamera; [Header("旋转设置")] [Tooltip("左右旋转的速度")] public float rotationSpeed = 5f; [Header("FOV设置(控制远近效果)")] [Tooltip("初始视野角度")] public float initialFOV = 60f; [Tooltip("最大视野角度(看起来更远)")] public float maxFOV = 90f; [Tooltip("最小视野角度(看起来更近)")] public float minFOV = 30f; [Tooltip("滚轮控制FOV的灵敏度")] public float fovSensitivity = 5f; private float currentFOV; void Start() { // 如果未指定虚拟相机,尝试查找场景中的CinemachineVirtualCamera if (virtualCamera == null) { virtualCamera = FindObjectOfType(); } // 如果未指定目标,默认使用虚拟相机的跟随目标 if (target == null && virtualCamera != null) { target = virtualCamera.Follow; } // 初始化FOV值 if (virtualCamera != null) { currentFOV = initialFOV; virtualCamera.m_Lens.FieldOfView = currentFOV; } } void Update() { if (target == null || virtualCamera == null) return; // 鼠标右键控制旋转 if (Input.GetMouseButton(1)) { float mouseX = Input.GetAxis("Mouse X") * rotationSpeed; target.Rotate(Vector3.up, -mouseX); } // 鼠标滚轮控制FOV(远近效果) float scroll = Input.GetAxis("Mouse ScrollWheel"); if (scroll != 0) { currentFOV -= scroll * fovSensitivity; currentFOV = Mathf.Clamp(currentFOV, minFOV, maxFOV); virtualCamera.m_Lens.FieldOfView = currentFOV; } } }