74 lines
2.0 KiB
C#
Raw Normal View History

2025-09-22 17:41:04 +08:00
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<CinemachineVirtualCamera>();
}
// 如果未指定目标,默认使用虚拟相机的跟随目标
if (target == null && virtualCamera != null)
{
target = virtualCamera.Follow;
}
// 初始化FOV值
if (virtualCamera != null)
{
currentFOV = initialFOV;
virtualCamera.m_Lens.FieldOfView = currentFOV;
}
}
void LateUpdate()
{
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;
}
}
}