当前位置:   UNITY > 正文

unity实现鼠标拖拽物品移动_unity拖动3d物体

unity拖动3d物体

unity实现物品拖拽,3D创景需要注意的是一个屏幕坐标转换为世界坐标和世界坐标转换屏幕坐标,熟悉他们之间的转化,就没什么难度了

从摄像机发射一条射线,通过射线检测到鼠标点击的物体,将物品的世界坐标转换为屏幕坐标

将鼠标的位置为,鼠标点击的X\Y轴和物品的Z给到,然后将鼠标的屏幕坐标转换为世界坐标给到物品在update里面实时更新移动,这样就可以完成物品的拖拽了

  1. public class Drag : MonoBehaviour
  2. {
  3. private int flag = 0;
  4. private bool b = false;
  5. private GameObject go;
  6. Vector3 targetScreenPos;
  7. Vector3 mousePos;
  8. void Start()
  9. {
  10. }
  11. void Update()
  12. {
  13. if(Input.GetMouseButton(0))
  14. {
  15. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  16. RaycastHit hit;//射线碰撞到的物体
  17. if(Physics.Raycast(ray,out hit))
  18. {
  19. if(hit.collider.tag == "A"|| hit.collider.tag == "B" || hit.collider.tag == "C")
  20. {
  21. go = hit.collider.gameObject;//点击到的物体
  22. b = true;
  23. if(flag==0)
  24. {
  25. flag = 1;
  26. }
  27. else
  28. {
  29. flag = 0;
  30. }
  31. }
  32. if(flag==1 && b && go!=null)
  33. {
  34. targetScreenPos = Camera.main.WorldToScreenPoint(go.transform.position);//将屏幕坐标转换成世界坐标
  35. mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);//鼠标的位置
  36. go.transform.position = Camera.main.ScreenToWorldPoint(mousePos);//将物体的位置给到鼠标颠倒屏幕的位置
  37. }
  38. }
  39. }
  40. }
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/UNITY/detail/33886
推荐阅读
相关标签
  

闽ICP备14008679号