传送后将 object 移动到另一个 object 的相同位置

Moving an object to the same spot on another object after teleportation

抱歉标题名称,但我不知道如何更好地概括它,请随意更改。

我正在尝试统一创建 2d 门户,现在虽然在门户上使用此脚本

OnTriggerEnter2d(collision other)
{
    if(other.gameobject.tag == "ball")
    {
        // portal2 is just a gameobject I input in the editor.
        other.transform.position == portal2.transform.position;
    }
}

对不起,我画的草图很粗糙,但这是造成这种情况的原因:

现在做什么

但是如你所见,无论球如何击中 portal1(蓝色),它总是会从 portal2(橙色)的中心出来。

但我需要它来执行此操作:

我需要它做什么

如果球击中传送门的顶部,它就会从顶部出来,如果它击中底部,它就会从底部出来,等等。

不过我不知道该怎么做,两个传送门大小相同,只是彼此交换精灵。

您需要计算碰撞的(在您的情况下:y)偏移量。我相信这将是最简单的解决方案,因为您使用的是触发器(因此获得 Collider)而不是碰撞(您将获得 Collision 并因此可以访问 contactPoints):

void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag == "ball")
    {
        var offset = other.transform.position - transform.position;
        // Set x to 0 if you want to ignore the x offset value like your image suggests
        offset.x = 0; 
        other.transform.position = portal2.transform.position + offset;
    }
}

您可以做的是当它发生碰撞时获取它在您的代码中的位置。然后使用该位置来决定它应该出现在另一个位置上的位置。例如,假设传送门长 20,一个传送门长 100,一个传送门长 200。当它发生碰撞时,您会得到您的球在 115。下一个传送门在 200。您从传送门的位置减去球的位置,即球碰撞并添加你得到的东西,例如这个球是 15,因为 115-100=15。因此,当您添加它们时,您将得到 215。然后您将使用 215 来改变球的位置,而不仅仅是 200。