Unity 拖动3d物体跟随鼠标(手指)移动
-
demo下载地址 demo下载
-
代码
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 可以直接外部赋值,不用射线检测 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); yield return new WaitForFixedUpdate(); } }