Unity 鼠标滚轮缩放 拖动移动视角

本文详细介绍了如何在Unity中实现鼠标滚轮操作来缩放场景视图,以及通过鼠标拖动来平移视角。内容包括关键的输入监听、坐标转换和相机控制逻辑,帮助开发者更好地控制3D场景的交互体验。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cameraMove : MonoBehaviour
{
   
   
    public enum RotationAxes
    {
   
   
        MouseXAndY = 0,
        MouseX = 1,
        MouseY = 2
    }

    public RotationAxes m_axes = RotationAxes.MouseXAndY;
    public float m_sensitivityX = 10f;
    public float m_sensitivityY = 10f;

    public bool CanMove  = false;

    // 水平方向的 镜头转向
    public float m_minimumX = -360f;
    public float m_maximumX = 360f;
    // 垂直方向的 镜头转向 (这里给个限度 最大仰角为45°)
    
### Unity摄像机基于鼠标输入的平滑移动、旋转和缩放功能 在Unity中实现摄像机根据鼠标点击位置进行平滑移动、旋转和滚轮缩放的功能,需要结合`Input.mousePosition`获取鼠标位置[^1],同利用`Camera.main.ScreenPointToRay`将鼠标位置转换为射线以检测场景中的交互点。此外,还需要通过监听鼠标滚轮事件来控制摄像机与目标之间的距离[^2]。 以下是一个完整的脚本示例,用于实现摄像机的平滑移动、旋转和缩放功能: ```csharp using UnityEngine; public class CameraController : MonoBehaviour { public float moveSpeed = 5f; // 摄像机移动速度 public float rotateSpeed = 2f; // 摄像机旋转速度 public float zoomSpeed = 5f; // 滚轮缩放速度 public float minDistance = 5f; // 最小距离 public float maxDistance = 20f; // 最大距离 private Vector3 targetPosition; // 目标位置 void Start() { targetPosition = transform.position; // 初始化目标位置 } void Update() { // 鼠标右键拖动移动摄像机 if (Input.GetMouseButton(1)) { Vector3 moveDirection = new Vector3(-Input.GetAxis("Mouse X"), 0, -Input.GetAxis("Mouse Y")); targetPosition += transform.TransformDirection(moveDirection) * moveSpeed * Time.deltaTime; } // 鼠标左键拖动:旋转摄像机 if (Input.GetMouseButton(0)) { float horizontal = Input.GetAxis("Mouse X") * rotateSpeed; float vertical = Input.GetAxis("Mouse Y") * rotateSpeed; transform.RotateAround(targetPosition, Vector3.up, -horizontal); transform.RotateAround(targetPosition, transform.right, vertical); } // 鼠标滚轮缩放摄像机 float scroll = Input.GetAxis("Mouse ScrollWheel") * zoomSpeed; float currentDistance = Vector3.Distance(transform.position, targetPosition); float newDistance = Mathf.Clamp(currentDistance - scroll, minDistance, maxDistance); Vector3 desiredPosition = (transform.position - targetPosition).normalized * newDistance + targetPosition; transform.position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * zoomSpeed); // 平滑移动到目标位置 transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * moveSpeed); } } ``` #### 代码说明 1. **鼠标右键拖动**:通过监听鼠标右键按下事件,计算水平和垂直方向的移动量,并将其应用于摄像机的目标位置。 2. **鼠标左键拖动**:通过监听鼠标左键按下事件,围绕目标位置旋转摄像机,实现视角调整。 3. **鼠标滚轮缩放**:通过监听鼠标滚轮事件,动态调整摄像机与目标之间的距离,确保其在设定的最小和最大距离范围内。 #### 注意事项 - 确保场景中存在一个明确的目标位置(如地面或特定物体),以便摄像机能够正确地围绕其移动和旋转。 - 调整`moveSpeed`、`rotateSpeed`和`zoomSpeed`参数以适应具体需求。 - 如果需要支持触摸设备,可以扩展脚本以处理多点触控手势[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值