Unity3d 什么';ScreenToWorldPoint和ScreenPointToWorldPointInRectangle之间的区别是什么?

Unity3d 什么';ScreenToWorldPoint和ScreenPointToWorldPointInRectangle之间的区别是什么?,unity3d,Unity3d,ScreenToWorldPoint和ScreenPointToWorldPointInRectangle之间有什么区别?我们什么时候应该用哪一种 塞纳里奥: 我正在使用UI系统创建类似炉石的纸牌游戏。我想将鼠标拖动位置转换为世界位置RectTransformUtility.ScreenPointToWorldPointInRectangle(UIObjectBeingDrawed.transform.parent作为RectTransform、Input.mousePosition、Camer

ScreenToWorldPoint和ScreenPointToWorldPointInRectangle之间有什么区别?我们什么时候应该用哪一种

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

为您提供一个世界位置(返回值),该位置沿通过摄影机(其方法正在被调用的
摄影机
的近平面)的光线在某个给定点(位置
参数的x和y分量)和距该近平面的给定距离(位置参数的z分量)拍摄

您应该在以下情况下使用此选项:

  • 与您感兴趣的相机的近平面保持特定距离,并且
  • 不需要知道它是否击中某个矩形内部
  • 您可以将此视为一种快捷方式,它使用
    位置的x和y以及
    相机的各种信息来生成
    光线
    ,而
    位置的z分量是
    距离
    参数

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

    您应该在以下情况下使用此选项:

  • 有一个你感兴趣的特定矩形,与摄影机光线相交
  • 您不知道摄影机或其近平面与交点之间的距离
  • 想知道该矩形是否被光线击中

  • 您可以将此视为一种快捷方式,它使用
    cam
    screenPoint
    制作
    射线,使用
    rect
    制作
    平面,还提供了一些关于它是否会在rect边界之外相交的更多信息。

    因此,一般来说,为什么不使用已经起作用的东西呢^^非常感谢。就我而言,我想我可以用其中任何一个,对吗?但为什么“ScreenToWorldPoint”给出了不同的结果?两者都应该将鼠标在屏幕上的位置转换为世界位置。世界位置不是二维的,因此取决于相机的位置,旋转和
    ScreenToWorldPoint
    位置的z值与
    screentoworldpointinrectangle
    的矩形位置和旋转结果可能非常不同。仅举一个例子,如果在
    ScreenToWorldPoint
    中z分量有10000个,但在
    screentoworldpointinrectangle
    中,rect直接位于摄影机前面,则它们将非常不同。如果这个答案有帮助,考虑一下!非常感谢。在我的项目中,摄影机的z和到摄影机的rect距离是不同的,我确实将摄影机的x旋转到90(画布设置为“屏幕空间-摄影机”)。但是我仍然不明白为什么在调用
    ScreenToWorldPoint
    screentoworldpointinrectangle
    时x和y是不同的。因为鼠标位置是固定的,世界坐标是相同的,我认为它们应该给出相同的x和y。另外,它们都提供了Camera.main。相机的位置是(0,4.75,0),旋转是(90,0,0)。画布的平面距离为4.75。我测试它,例如,如果鼠标位置是(642.7834.7,0.0),那么
    ScreenToWorldPoint
    给出(0.0,4.8,0.0)和
    screentoworldpointinrectangle
    给出(0.3,0.0,-0.4)。