首页 > 解决方案 > ScreenToWorldPoint 和 ScreenPointToWorldPointInRectangle 有什么区别?

问题描述

ScreenToWorldPoint 和 ScreenPointToWorldPointInRectangle 有什么区别?我们什么时候应该使用哪一个?

Senario:我正在使用 UI 系统创建类似于《炉石传说》的纸牌游戏。我想将鼠标拖动位置转换为世界位置。RectTransformUtility.ScreenPointToWorldPointInRectangle(UIObjectBeingDragged.transform.parent as RectTransform, Input.mousePosition, Camera.main, out resultV3)工作正常。但我也尝试过Camera.main.ScreenToWorldPoint(Input.mousePosition),它给出了不同的“错误”结果。

标签: unity3d

解决方案


ScreenToWorldPoint

Camera在某个给定点(参数的 x 和 y 分量)position以及从近平面(position参数的 z 分量)。

当您:

  1. 与您感兴趣的相机的近平面有特定距离,并且
  2. 不需要知道它是否在某个矩形内

您可以将其视为Ray.GetPoint使用 x 和 y 的position各种信息Camera来制作 的快捷方式Ray,而 的 z 分量positiondistance参数。

ScreenPointToWorldPointInRectangle

还为您提供一个世界位置 ( worldPoint),沿着通过相机近平面 ( cam) 在给定点 ( screenPoint) 拍摄的光线。只是这一次不是给你一个沿射线给定距离的点,而是给你该射线和给定矩形( )之间的交点(rect如果存在),并告诉你是否存在这样的交点(返回值) .

当您:

  1. 有一个你感兴趣的特定矩形与相机光线的交点,
  2. 您不知道相机或其近平面与交点之间的距离
  3. 想知道那个矩形是否被射线击中。

您可以将其视为Plane.Raycast使用camscreenPoint制作Rayrect制作, 的快捷方式Plane,并且还提供了一些关于它是否会在矩形边界之外相交的更多信息。


推荐阅读