繁体   English   中英

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

[英]Grappling hook ray cast direction problems in Unity

嘿团队我目前正在开发一个第三人称游戏,我想从玩家发射抓钩到偏离相机中心的点。

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

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

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

在此先感谢您的帮助。

我要做的是确定屏幕上标线的位置,然后(如 Aybe 建议的那样)使用ScreenPointToRayViewportToRay (取决于是否更容易获得像素 position 或每个标线的分数 position)到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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM