Unity 运行时编辑物体移动、旋转、缩放

先看一下功能效果
在这里插入图片描述

首先导入插件RuntimeGizmo
在这里插入图片描述
将TransformGizmo脚本挂载相机上,可以实现点击物体移动、缩放和旋转。

在此基础上还需实现右键旋转视角,滚轮控制视角移动以及视角缩放功能。

新建CameraController脚本,也挂载在主相机上。

using UnityEngine;

public class CameraController : MonoBehaviour
{
    /// <summary>
    /// 主相机
    /// </summary>
    private Camera camera;
    /// <summary>
    /// 视角旋转速度
    /// </summary>
    private float rotateSpeed = 0.1f;
    /// <summary>
    /// 视角移动灵敏度
    /// </summary>
    private float sensitivity = 5f;
    /// <summary> 
    /// 鼠标上一帧位置 
    /// </summary>
    private Vector3 lastPos = Vector3.zero;

    private void Start()
    {
        camera = GetComponent<Camera>();
    }
    
    void Update()
    {
        if (Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
        {
            lastPos = Input.mousePosition;
        }

        if (Input.GetMouseButton(1))//鼠标右键按下 旋转摄影机
        {
            RotateCamera();
        }

        if (Input.GetMouseButton(2))//滚轮按下拖拽视角
        {
            DragCamera();
        }

        MoveCamera();//视角放近放远
    }

    /// <summary>
    /// 相机前后移动
    /// </summary>
    private void MoveCamera()
    {
        float mouse = Input.GetAxis("Mouse ScrollWheel");
        Vector3 distance = transform.forward * mouse * 10f;
        transform.position += distance;
    }

    /// <summary>
    /// 相机旋转
    /// </summary>
    private void RotateCamera()
    {
        float dx = Input.mousePosition.x - lastPos.x;
        float dy = Input.mousePosition.y - lastPos.y;
        
        Vector3 rotation = transform.rotation.eulerAngles;
        rotation.x -= dy * rotateSpeed;
        rotation.y += dx * rotateSpeed;
        transform.rotation = Quaternion.Euler(rotation);

        lastPos = Input.mousePosition;
    }

    /// <summary>
    /// 相机平移
    /// </summary>
    private void DragCamera()
    {
        Vector3 delta = lastPos - Input.mousePosition;
        float sq = Mathf.Sqrt(camera.pixelHeight * camera.pixelHeight + camera.pixelWidth * camera.pixelWidth);
        delta = delta / sq;
        delta *= sensitivity;
        delta = camera.cameraToWorldMatrix.MultiplyVector(delta);
        camera.transform.position += delta;
        lastPos = Input.mousePosition;
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值