unity中 拖拽任意的对象

来源:互联网 发布:优化探究官网 编辑:程序博客网 时间:2024/06/06 02:35

孙广东   2015.8.16 

目的 :  我们能简单的通过 鼠标位置 得到目标对象  如果没有使用刚体组件  


Step - 1: 在3D项目中设置场景.  一个空对象命名为: DragAndDrop   ,和创建一些其他的游戏对象 如 sphere, cube 等 

- 感觉如下l;



Step - 2: C# 脚本命名为  "GameobjectDragAndDrop". 

Step - 3: 添加方法:

GameObject ReturnClickedObject(out RaycastHit hit)    {        GameObject target = null;        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);        if (Physics.Raycast(ray.origin, ray.direction * 10, out hit))        {            target = hit.collider.gameObject;}        return target;    }

Step - 4: 在Update 方法中

void Update()    {         if (Input.GetMouseButtonDown(0))        {            RaycastHit hitInfo;            target = ReturnClickedObject(out hitInfo);            if (target != null)            {                isMouseDrag = true;                Debug.Log("target position :" + target.transform.position);                //Convert world position to screen position.                screenPosition = Camera.main.WorldToScreenPoint(target.transform.position);offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z));            }        }         if (Input.GetMouseButtonUp(0))        {            isMouseDrag = false;        }         if (isMouseDrag)        {            //track mouse position.            Vector3 currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);             //convert screen position to world position with offset changes.            Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace) + offset;             //It will update target gameobject's current postion.            target.transform.position = currentPosition;        }     }

Step - 6: 运行程序,然后拖拽对象就OK了啊。。。。


1 0