Unity怎么通过鼠标滚轮控制相机以当前鼠标指针为中心拉近和拉远
时间: 2024-03-20 07:42:29 浏览: 14
你可以通过以下代码实现:
```csharp
using UnityEngine;
public class CameraController : MonoBehaviour
{
public float zoomSpeed = 10.0f;
public float minZoomDistance 1.0f;
public float maxZoom = 10.0f;
void Update()
{
// 获取鼠标滚轮的滚动距离,delta 指的是滚动的增量
float zoomDelta = Input.GetAxis("Mouse ScrollWheel") * zoomSpeed * Time.deltaTime;
// 如果滚轮有滚动
if (zoomDelta != 0)
{
Camera camera = GetComponent<Camera>();
// 计算相机当前位置到鼠标位置的距离
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
float distance = (transform.position - ray.origin).magnitude;
// 计算缩放后的距离
float zoomDistance = Mathf.Clamp(distance - zoomDelta, minZoomDistance, maxZoomDistance);
// 计算相机位置
Vector3 cameraPosition = ray.GetPoint(zoomDistance);
// 移动相机
transform.position = cameraPosition;
}
}
}
```
在这个脚本中,我们首先获取鼠标滚轮的滚动距离,然后计算相机当前位置到鼠标位置的距离。接着,我们计算缩放后的距离,然后通过相机的 ScreenPointToRay 方法得到鼠标位置所对应的世界坐标,并将相机移动到这个位置。
注意,我们使用了 Mathf.Clamp 方法来限制缩放后的距离在 minZoomDistance 和 maxZoomDistance 之间。你可以根据自己的需要调整这两个值。