2025-09-22 17:41:04 +08:00

74 lines
2.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}