Unity 拖动3d物体跟随鼠标(手指)移动

1.不垂直于地面的情况是 通过射线检测地面 返回碰撞的点 直接赋值给当前物体  也可以用于垂直于地面的情况 

2.在移动端只需要把Input.mousePosition替换成Input.GrtTouch(0).position即可

if (Input.GetMouseButtonDown(0))
            {
                Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    Debug.Log(hit.collider.gameObject.tag);
                    if (hit.collider.gameObject.CompareTag("sheep"))
                    {
                        currentObj = hit.collider.transform;
                        sheep = currentObj.GetComponent<Sheep>();
                        sheep.StartDrag();
                        objScreenPos = mainCamera.WorldToScreenPoint(currentObj.position);

                        Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objScreenPos.z);
                        mousePos = mainCamera.ScreenToWorldPoint(mousePos);
                        offest = currentObj.position - mousePos;
                    }
                }
            }
            if (Input.GetMouseButton(0))
            {
                if (currentObj != null)
                {
                    //相机视野方向垂直于地面时
                    Vector3 curMousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objScreenPos.z);
                    curMousePos = mainCamera.ScreenToWorldPoint(curMousePos);
                    Vector3 newPos = curMousePos + offest;
                    currentObj.transform.position = new Vector3(newPos.x, currentObj.position.y, newPos.z);

                    //相机视野方向不垂直于地面时
                    //Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
                    //RaycastHit hit;
                    //if (Physics.Raycast(ray, out hit, 100, 1 << 9))
                    //{
                    //    currentObj.transform.position = hit.point;
                    //}
                    yield return new WaitForFixedUpdate();
                }
            }

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值