Unity中的抓钩射线投射方向问题

Posted

技术标签:

【中文标题】Unity中的抓钩射线投射方向问题【英文标题】:Grappling hook ray cast direction problems in Unity 【发布时间】:2020-10-27 05:20:21 【问题描述】:

大家好,我目前正在开发一款第三人称游戏,我想将抓钩从玩家发射到偏离摄像机中心的点。

我有一个带有用于十字准线的 Ui 图像的屏幕覆盖画布。当按住左移键时,十字准线沿 x 轴从中心向外移动,一旦释放转移,就会返回中心,有点像游戏中的十字准线传播,除了我想通过 shift 键触发传播。这些十字准线用于指示抓钩着陆的锚点的位置,从玩家出发并击中十字准线正前方的任何物体。 (想象一下对泰坦 ODM 设备的攻击,如果你看过的话)。我正在寻找一种方法,在这些十字准线偏离中心的情况下,将它们从玩家投射到这些十字准线的前方。

到目前为止,我已经设置并运行了擒抱系统,但是当我使用十字准线传播时,方向参数出现问题。它分离得很好,但是钩子相对于十字准线的位置显然不在,因为我目前正在尝试使用角度计算,而不是这些标线前面的位置。

我基本上想知道是否可以使用这些屏幕覆盖 UI 图像来向前投射,或者是否有更好的方法来完成同样的事情。我有疑问,因为它们是屏幕覆盖,所以我想它们的坐标不会在它们出现时附加到相机上。

提前感谢您的帮助。

【问题讨论】:

是什么阻止您从这些覆盖层在屏幕上的位置投射光线? 这就是我希望做的,但不知道如何实现。 ScreenPointToRay docs.unity3d.com/Manual/CameraRays.html 怎么样? 谢谢,这似乎是正确的方向。但是,当叠加层的物理位置实际上不是它出现在屏幕上的位置时,如何获得屏幕叠加层的矢量 3。 (即它出现在我的屏幕上,但实际位于地图一侧的某处)。如果这是一个愚蠢的问题,请提前道歉 【参考方案1】:

我要做的是确定屏幕上标线的位置,然后(如 Aybe 建议的那样)使用 ScreenPointToRayViewportToRay(取决于是否更容易获得每个标线的像素位置或分数位置)到Physics.Raycast 那条来自相机的光线进入场景以找到光线碰撞的位置。在这一点上,你有两个世界位置玩家似乎想要投篮。:

Vector3 hookTarget1;
Vector3 hookTarget2;

所以,现在你实际上必须发射钩子 - 但你知道钩子不是从摄像机拍摄的,它们是从玩家那里拍摄的,它们可能会稍微偏移。让我们调用起始点(可能具有相同的值):

Vector3 hookOrigin1;
Vector3 hookOrigin2;

因此,您可以创建源自钩子原点并指向目标的射线:

Ray hookShot1 = new Ray(hookOrigin1, hookTarget1 - hookOrigin1);
Ray hookShot2 = new Ray(hookOrigin2, hookTarget2 - hookOrigin2);

如果您愿意,可以使用这些光线再进行一次Physics.Raycast,以确认玩家和目标位置之间没有任何树木或其他障碍物 - 如果有,那可能是锚实际上应该下沉:

Vector3 anchorPoint1;
Vector3 anchorPoint2;

这些射线的原点和这些锚点之间的线段将适用于渲染电缆,计算如何移动玩家的物理特性,以及检查可能导致锚点释放的与世界几何体的碰撞。

【讨论】:

感谢您的帮助。我一直在使用 ViewportToRay 部分遇到问题,但我想我几乎已经破解了它。干杯伙计们

以上是关于Unity中的抓钩射线投射方向问题的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 射线的原理,基础用法

Unity 中的光线投射和计时器问题

unity为啥射线投射到UI上面会返回空?

unity中的射线检测

Unity物理投射(Physics.XXXCast...)相关小问题整理

Unity Physics.Raycast 射线投射