这段代码是一个用于操作对象的 Unity C# 脚本。它可以实现对象的旋转和平移操作,并通过鼠标滚轮实现缩放。

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

public class drag : MonoBehaviour
{
    [Header('操作对象')]
    /// <summary>
    /// 操作对象
    /// </summary>
    public Transform m_target;

    void Start()
    {
        isDown1 = false;
        isDown2 = false;
    }

    /// <summary>
    /// 右键是否按下 
    /// </summary>
    private bool isDown1;

    /// <summary>
    /// 中键是否按下
    /// </summary>
    private bool isDown2;

    void Update()
    {
        // 按下了鼠标中键
        if (Input.GetMouseButtonDown(1))
            isDown1 = true;
        // 抬起了鼠标中键
        if (Input.GetMouseButtonUp(1))
            isDown1 = false;
        // 按下鼠标右键
        if (Input.GetMouseButtonDown(2))
            isDown2 = true;
        // 抬起了鼠标右键
        if (Input.GetMouseButtonUp(2))
            isDown2 = false;
        // 缩放 Input.mouseScrollDelta.y
        m_target.localScale += Time.deltaTime * m_target.localScale * Input.mouseScrollDelta.y;
    }

    private void LateUpdate()
    {
        if (isDown1)
        {
            // 计算单位时间内鼠标的偏移量
            float x = Input.GetAxis('Mouse X');
            float y = Input.GetAxis('Mouse Y');
            Vector3 rot = new Vector3(y, -x, 0);
            float spd = 10; //速度
            m_target.Rotate(spd * rot, Space.World);
        }
        if (isDown2)
        {
            // 计算单位时间内鼠标的偏移量
            float x = Input.GetAxis('Mouse X');
            float y = Input.GetAxis('Mouse Y');
            float spd = 0.4f;   //速度
            m_target.Translate(spd * new Vector3(x, y), Space.World);
        }
    }
}

代码解释:

  1. 初始化

    • Start() 函数中,初始化 isDown1isDown2 两个布尔变量,用于记录鼠标右键和中键是否按下。
  2. 鼠标事件处理

    • Update() 函数中,通过 Input.GetMouseButtonDown()Input.GetMouseButtonUp() 函数判断鼠标右键和中键的按下和抬起事件,并更新 isDown1isDown2 的值。
    • 同时,根据鼠标滚轮的滚动方向 (Input.mouseScrollDelta.y) 来实现对象的缩放操作。
  3. 旋转操作

    • isDown1 为真(鼠标右键按下)时,在 LateUpdate() 函数中,根据鼠标在单位时间内的偏移量 (Input.GetAxis('Mouse X')Input.GetAxis('Mouse Y')) 计算旋转角度,并乘以速度 spd,使用 Rotate() 函数实现旋转操作。
  4. 平移操作

    • isDown2 为真(鼠标中键按下)时,在 LateUpdate() 函数中,根据鼠标在单位时间内的偏移量计算平移距离,并乘以速度 spd,使用 Translate() 函数实现平移操作。

注意:

  • 旋转轴是世界坐标系的 y 轴和 x 轴,所以需要将 x 和 y 的值互换。
  • 平移是相对于世界坐标系的。
  • 脚本中 m_target 变量需要连接到要操作的对象。

本脚本可以帮助你快速实现鼠标控制对象的基本操作,你可以根据自己的需求修改代码,实现更加复杂的功能。

Unity C# 脚本:鼠标操作对象旋转、平移和缩放

原文地址: https://www.cveoy.top/t/topic/bWQz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录