Unity C# 脚本:鼠标操作对象旋转、平移和缩放
这段代码是一个用于操作对象的 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);
}
}
}
代码解释:
-
初始化
- 在
Start()函数中,初始化isDown1和isDown2两个布尔变量,用于记录鼠标右键和中键是否按下。
- 在
-
鼠标事件处理
- 在
Update()函数中,通过Input.GetMouseButtonDown()和Input.GetMouseButtonUp()函数判断鼠标右键和中键的按下和抬起事件,并更新isDown1和isDown2的值。 - 同时,根据鼠标滚轮的滚动方向 (
Input.mouseScrollDelta.y) 来实现对象的缩放操作。
- 在
-
旋转操作
- 当
isDown1为真(鼠标右键按下)时,在LateUpdate()函数中,根据鼠标在单位时间内的偏移量 (Input.GetAxis('Mouse X')和Input.GetAxis('Mouse Y')) 计算旋转角度,并乘以速度spd,使用Rotate()函数实现旋转操作。
- 当
-
平移操作
- 当
isDown2为真(鼠标中键按下)时,在LateUpdate()函数中,根据鼠标在单位时间内的偏移量计算平移距离,并乘以速度spd,使用Translate()函数实现平移操作。
- 当
注意:
- 旋转轴是世界坐标系的 y 轴和 x 轴,所以需要将 x 和 y 的值互换。
- 平移是相对于世界坐标系的。
- 脚本中
m_target变量需要连接到要操作的对象。
本脚本可以帮助你快速实现鼠标控制对象的基本操作,你可以根据自己的需求修改代码,实现更加复杂的功能。
原文地址: https://www.cveoy.top/t/topic/bWQz 著作权归作者所有。请勿转载和采集!