unity3d鼠标控制物体 移动 旋转 缩放

需求:制作一个鼠标中键移动缩放和鼠标右键旋转的功能(鼠标右键旋转可以自行改成鼠标左键旋转)

效果图:

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层次更加清晰,新建几个空物体分隔各个组件 (可忽略)

猜你喜欢

转载自blog.csdn.net/zhunju0089/article/details/103644897
今日推荐