相机可见区域,使用鼠标拖拽模型

知识点

  1. 向量
  2. 射线检测
  3. 坐标转换

思路

  1. 使用射线检测获取射线检测点与模型对象之间的偏移量 (世界空间)
  2. 使用相机的坐标转换获取检测点与鼠标位置之间的偏移量 (屏幕空间)
  3. 拖拽时,更新模型位置

代码示例

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;
    }
}