传送后将 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。
抱歉标题名称,但我不知道如何更好地概括它,请随意更改。
我正在尝试统一创建 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。