超详细,unity如何用鼠标中键控制视角放大、移动

介绍

unity如何用鼠标中键,控制视角放大、移动?
鼠标滑轮滑动视角放大。
鼠标滑动按住拖拽,视角移动。

在这里插入图片描述


方法

把这个脚本,挂载到主相机上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ViewController : MonoBehaviour {

    public float sizespeed = 1;    // 定义了一个名为sizespeed的公共(public)浮点型(float)变量,初始值为1
    public float mouseSpeed = 10;  // 定义了一个名为mouseSpeed的公共浮点型变量,初始值为10

    private Vector3 lastMousePosition;    // 定义了一个名为lastMousePosition的私有(private)Vector3类型变量

    // Update is called once per frame
    void Update () {    // 定义了一个名为Update的方法,在每一帧(frame)中被调用

        float mouse = -Input.GetAxis("Mouse ScrollWheel");    // 获取鼠标滚轮的输入值,并将其赋值给名为mouse的局部(local)浮点型变量

        // 鼠标中键按住拖动
        if (Input.GetMouseButton(2)) {    // 检测if语句中的条件是否为真,如果鼠标中键被按住,则执行大括号内的代码块

            Vector3 deltaMousePosition = Input.mousePosition - lastMousePosition;    // 获取当前鼠标位置和上一次鼠标位置之间的差值,并将其赋值给名为deltaMousePosition的局部Vector3类型变量

            transform.Translate(-deltaMousePosition.x * mouseSpeed * Time.deltaTime, -deltaMousePosition.y * mouseSpeed * Time.deltaTime, 0);    // 将摄像机的位置向左右和上下移动,移动的距离由鼠标的移动距离和鼠标速度决定

        }

        transform.Translate(new Vector3(0, mouse * sizespeed, 0) * Time.deltaTime, Space.World);    // 将摄像机的位置向上或向下移动,移动的距离由鼠标滚轮的输入值和大小速度决定

        lastMousePosition = Input.mousePosition;    // 将鼠标当前位置赋值给lastMousePosition变量,以便下一帧计算鼠标位置差值
    }
}

下面是对该方法的分点总结:

  1. 获取鼠标滚轮输入值:
float mouse = -Input.GetAxis("Mouse ScrollWheel");
  1. 如果鼠标中键被按住,则获取当前鼠标位置和上一帧鼠标位置之间的差值,并将其赋值给名为deltaMousePosition的局部Vector3类型变量:
if (Input.GetMouseButton(2)) {
    Vector3 deltaMousePosition = Input.mousePosition - lastMousePosition;
}
  1. 将摄像机的位置向左右和上下移动,移动的距离由鼠标的移动距离和鼠标速度决定:
transform.Translate(-deltaMousePosition.x * mouseSpeed * Time.deltaTime, -deltaMousePosition.y * mouseSpeed * Time.deltaTime, 0);
  1. 将摄像机的位置向上或向下移动,移动的距离由鼠标滚轮的输入值和大小速度决定:
transform.Translate(new Vector3(0, mouse * sizespeed, 0) * Time.deltaTime, Space.World);
  1. 将鼠标当前位置赋值给lastMousePosition变量,以便下一帧计算鼠标位置差值:
lastMousePosition = Input.mousePosition;
  1. Update方法的完整实现如下:
void Update () {
    float mouse = -Input.GetAxis("Mouse ScrollWheel");

    if (Input.GetMouseButton(2)) {
        Vector3 deltaMousePosition = Input.mousePosition - lastMousePosition;
        transform.Translate(-deltaMousePosition.x * mouseSpeed * Time.deltaTime, -deltaMousePosition.y * mouseSpeed * Time.deltaTime, 0);
    }

    transform.Translate(new Vector3(0, mouse * sizespeed, 0) * Time.deltaTime, Space.World);
    lastMousePosition = Input.mousePosition;
}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值