【问题标题】:2d Portal teleport Issue二维传送门传送问题
【发布时间】:2016-08-07 14:26:47
【问题描述】:

请看附图。有3个方块,每个都有一个传送门,传送门是黑色的孩子,现在有红球,所以球会撞到传送门,球会从另外两个传送门出来,我想要球的正确位置它出来的门户。例如,当球击中门户时,球应该从同一击球点上的另一个门户中出来。

谢谢

【问题讨论】:

  • 听起来很有趣。你有问题吗?
  • 嗨,谢谢,是的,当球从另一个入口出来时,我想正确定位球。
  • 没有人阻止你这样做 ;) 到目前为止你尝试了什么,你的方法出了什么问题?
  • 是的,没有人阻止我大声笑,基本上当红球击中门户时,我就是这样做的。 redball.transform.position = portal2.transform.position + new Vector3 (portal1.transform.position.x - ballhitPoint.x, portal1.transform.position.y - ballhitPoint.y, 0);当门户在垂直(90 度)或水平时,上面的代码运行良好,但是当门户有不同的角度时,红球没有正确定位。例如,当球从门户 3 中出来时,它不在正确的位置。我需要帮助。谢谢

标签: unity3d unityscript


【解决方案1】:

你没有处理旋转的传送门,这就是它不起作用的原因。

假设每个传送门 transform.right 都指向传送门外,Vector.forward 垂直于您的 2D 平面并且球从传送门 1 到传送门 2,您可以这样:
1.计算向量Vector3 v = ballhitPoint - portal1.transform.position
2.确定portal1和portal2之间的定向轮换:float r = (Mathf.Atan2(portal2.forward.y, portal2.forward.x) - Mathf.Atan2(portal1.forward.y, portal1.forward.x)) * 180 / Mathf.PI
3.将v旋转相同的量vNew = Quaternion.AngleAxis(r, Vector3.forward)
4.设置球位redball.transform.position = portal2.transform.position + vNew

总而言之,您想要实现的目标(如果我正确理解了您的问题):您在门户上有一个生命点,并希望将该生命点投射到目标门户。

我没有测试过这段代码,也不知道您在 2D 游戏中使用 3D 矢量的准确程度,因此您可能需要更改一些计算以适应您的轴。有关我使用过的函数的更多信息,我想参考 unity 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2020-02-12
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多