testMove.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using UnityEngine;
  2. using System.Collections;
  3. public class testMove : MonoBehaviour
  4. {
  5. private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标
  6. private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标
  7. private Transform _trans;// 目标物体的空间变换组件
  8. private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标
  9. private Vector3 _vec3Offset;// 偏移
  10. //数字资源整合
  11. [Header("SFX")]
  12. public AudioSource clickSFX;
  13. void Awake() { _trans = transform; }
  14. IEnumerator OnMouseDown()
  15. {
  16. clickSFX.Play();
  17. Debug.Log("in onmousedonw");
  18. // 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标
  19. _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);
  20. // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
  21. _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
  22. // 计算目标物体与鼠标物体在世界空间中的偏移量
  23. _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);
  24. // 鼠标左键按下
  25. while (Input.GetMouseButton(0))
  26. {
  27. Debug.Log("getmousebutton");
  28. // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
  29. _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
  30. // 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标
  31. _vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset;
  32. // 更新目标物体的世界空间坐标
  33. _trans.position = _vec3TargetWorldSpace;
  34. // 等待固定更新
  35. yield return new WaitForFixedUpdate();
  36. }
  37. }
  38. }