传送后将一个物体移动到另一个物体的同一点

很抱歉标题名称,但我不知道如何更好地对其进行概括,请随时进行更改。

虽然现在在门户网站上使用此脚本,但我正在尝试统一创建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(橙色)的中心。

但是我需要这样做:

我需要它做什么

传送后将一个物体移动到另一个物体的同一点

如果球碰到了传送门的顶部,则它从顶部出来,如果它碰到了底部,则它从底部出来,等等。

我不知道该怎么做,两个入口的大小相同,只是彼此的精灵交换。

xying8 回答:传送后将一个物体移动到另一个物体的同一点

您需要计算碰撞的偏移量(以您的情况为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来改变球在bof上的位置,而不仅仅是200。

本文链接:https://www.f2er.com/3127239.html

大家都在问