知识点
向量 射线检测 坐标转换
思路
使用射线检测 获取射线检测点与模型对象之间的偏移量 (世界空间) 使用相机的坐标转换 获取检测点与鼠标位置之间的偏移量 (屏幕空间) 拖拽时,更新模型位置
代码示例
using UnityEngine ;
public class TestDrag : MonoBehaviour
{ public Vector3 worldSpaceOffest; public Vector3 screenSpaceOffest; public Vector3 hitPointInScreenSpacePos; public Vector3 hitPoinitInWorldSpacePos; RaycastHit hit; private void OnMouseDown ( ) { Physics. Raycast ( Camera. main. ScreenPointToRay ( Input. mousePosition) , out hit, 100f ) ; worldSpaceOffest = transform. position - hit. point; screenSpaceOffest = Camera. main. WorldToScreenPoint ( hit. point) - Input. mousePosition; } private void OnMouseDrag ( ) { hitPointInScreenSpacePos = Input. mousePosition + screenSpaceOffest; hitPoinitInWorldSpacePos = Camera. main. ScreenToWorldPoint ( hitPointInScreenSpacePos) ; transform. position = hitPoinitInWorldSpacePos + worldSpaceOffest; }
}