首页 > Unity3D专栏 > 【Unity3D】鼠标拖拽物体移动
2017
07-25

【Unity3D】鼠标拖拽物体移动

把这段脚本拖给想要拖拽的物体,然后加上碰撞盒就可以了。

private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标    
 private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标    
 private Transform _trans;// 目标物体的空间变换组件    
 private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标    
 private Vector3 _vec3Offset;// 偏移    
  void Awake( ) { _trans = transform; }    
  IEnumerator OnMouseDown( )     
    {    
            // 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标     
            _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);    
            // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)     
            _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);    
            // 计算目标物体与鼠标物体在世界空间中的偏移量     
            _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);    
            // 鼠标左键按下     
            while ( Input.GetMouseButton(0) ) {    
                // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)    
                   _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);    
               // 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标    
                  _vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset;                  
              // 更新目标物体的世界空间坐标     
                 _trans.position = _vec3TargetWorldSpace;    
             // 等待固定更新     
                yield return new WaitForFixedUpdate();    
            }     
    }    

 



虚拟世界提醒您:如果您觉得本文不错,快快将这篇文章分享出去吧 ,感谢您的支持和关注,谢谢!
最后编辑:
作者:虚拟世界
专注互联网技术及资讯 技术研究中心|有相关Unity3D问题或者作事宜请联系我哦!
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝或者微信直接向我捐款,在此非常感谢您对虚拟世界的捐赠。

留下一个回复

你的email不会被公开。