74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
|