UGC编辑器开发-代码实现物体移动操作轴

视频效果:

工程网盘链接:

链接:https://pan.baidu.com/s/1atvfKceU1PnPPUE4mCEseg 
提取码:1212

关键代码:

    /// <summary>
    /// 鼠标按下
    /// </summary>
    private Vector3 offset;
    private void OnMouseDown()
    {
        isDrag = true;
        SetSelectView();
        //根据模型坐标系确定移动方向
        moveDir = transform.up;
        startPos = operaObj.transform.position;
        //保存上一次位置  不要Z值
        lastPos = (Vector2)Input.mousePosition;
    }
    
    
    private Vector3 axisPos;
    private Vector3 worldPos;
    //上一次鼠标点位 (屏幕坐标)
    private Vector3 lastPos;
    private void OnMouseDrag()
    {
        //当前鼠标位置 不要Z值
        axisPos = (Vector2)Input.mousePosition;
        
        //计算轴的屏幕坐标下的方向
        Vector3 moveDir2D = (Camera.main.WorldToScreenPoint(startPos + moveDir) - Camera.main.WorldToScreenPoint(startPos)).normalized;
        
        //鼠标移动方向 包括方向
        Vector3 dir = axisPos - lastPos;
        
        //将鼠标移动方向投影到轴
        dir = Vector3.Dot(dir, moveDir2D) * moveDir2D;

        //通过位置+方向 得到这一帧移动到的位置(屏幕坐标)
        Vector3 point2D = Camera.main.WorldToScreenPoint(operaObj.transform.position) + dir;
        //将该移动到的(屏幕)点转成(世界)点
        worldPos = Camera.main.ScreenToWorldPoint(point2D);
        
        worldPos = startPos + Vector3.Dot(worldPos - startPos, moveDir) * moveDir;
        
        operaObj.transform.position = worldPos;

        //保存上一次位置  不要Z值
        lastPos = (Vector2)Input.mousePosition;
    }

    /// <summary>
    /// 鼠标抬起
    /// </summary>
    private void OnMouseUp()
    {
        isDrag = false;
        SetNoSelectView();
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值