unity3d - ScreenToWorldPoint 和 ScreenPointToWorldPointInRectangle 有什么区别?
问题描述
ScreenToWorldPoint 和 ScreenPointToWorldPointInRectangle 有什么区别?我们什么时候应该使用哪一个?
Senario:我正在使用 UI 系统创建类似于《炉石传说》的纸牌游戏。我想将鼠标拖动位置转换为世界位置。RectTransformUtility.ScreenPointToWorldPointInRectangle(UIObjectBeingDragged.transform.parent as RectTransform, Input.mousePosition, Camera.main, out resultV3)
工作正常。但我也尝试过Camera.main.ScreenToWorldPoint(Input.mousePosition)
,它给出了不同的“错误”结果。
解决方案
ScreenToWorldPoint
Camera
在某个给定点(参数的 x 和 y 分量)position
以及从近平面(position
参数的 z 分量)。
当您:
- 与您感兴趣的相机的近平面有特定距离,并且
- 不需要知道它是否在某个矩形内
您可以将其视为Ray.GetPoint
使用 x 和 y 的position
各种信息Camera
来制作 的快捷方式Ray
,而 的 z 分量position
是distance
参数。
ScreenPointToWorldPointInRectangle
还为您提供一个世界位置 ( worldPoint
),沿着通过相机近平面 ( cam
) 在给定点 ( screenPoint
) 拍摄的光线。只是这一次不是给你一个沿射线给定距离的点,而是给你该射线和给定矩形( )之间的交点(rect
如果存在),并告诉你是否存在这样的交点(返回值) .
当您:
- 有一个你感兴趣的特定矩形与相机光线的交点,
- 您不知道相机或其近平面与交点之间的距离
- 想知道那个矩形是否被射线击中。
您可以将其视为Plane.Raycast
使用cam
和screenPoint
制作Ray
、rect
制作, 的快捷方式Plane
,并且还提供了一些关于它是否会在矩形边界之外相交的更多信息。
推荐阅读
- django - 如何在 Django Admin 中显示数据
- kubernetes - 如何在 kubernetes 仪表板中将基本身份验证模式设置为基于令牌?
- html - 如何在标准 html 中显示文本
- c - 信号处理程序不处理信号
- android - 如何在自定义视图 Android 中实现沿 3 个轴的引导运动(用于各种切换)?
- impala - Impala - 如何获取字符串中字符的倒数第三次出现
- r - 在 R 中使用多个变量预测 glm 的可视化
- xml - XSLT 1.0 删除节点
- amazon-s3 - 警告 - 在 Google Play 控制台上公开的 AWS 凭证
- regex - 替换子字符串