需求:制作一个鼠标中键移动缩放和鼠标右键旋转的功能(鼠标右键旋转可以自行改成鼠标左键旋转)
效果图:
1.新建一个名为Target的立方体cube
2.新建一个材质球 Yellow颜色的并挂载到Target立方体上
3.新建一个脚本 MatrixAction.cs
4.MatrixAction.cs代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MatrixAction : 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);
}
}
}
5.新建一个Script空物体并将脚本MatrixAction.cs挂载上去,然后将Target拖拽到脚本上
6.为了Hierarchy层次更加清晰,新建几个空物体分隔各个组件 (可忽略)