当玩家进入出站碰撞器时,我保存他最后的位置:
public void outboundEnter()
{
lastOutsidePosition = player.transform.position;
}
几秒钟后,如果他没有出去,我会把他传送回来
public void teleportOut()
{
player.transform.position = lastOutsidePosition;
}
问题在于
lastOutsidePosition
与碰撞开始的位置相同。
所以我需要增加一些位置值,以移动玩家避免相同的开始碰撞。
我正在尝试,但没有成功:
lastOutsidePosition.normalized * 1.3
为了将位置更改为边界内的某个位置,您将需要一个面向边界内的方向向量。
您可以使用的一个简单方向是与球员出界时的方向相反的方向。您需要存储这个方向,以便在传送回来时可以使用它。
inBoundsDirection = -player.transform.forward;
要将玩家移动特定量,请标准化方向向量并将其乘以您想要移动的距离。
directionalMove = inBoundsDirection.normalized * distanceToMove;
根据玩家退出的角度,这将产生不同的结果。如果角度接近平行,那么您可能会发现向内移动得不够。如果情况确实如此,您将需要获得不同的方向向量。一种可能的解决方案是你撞到的“墙”的正常情况。您还可以暴露一个方向,放置边界,使其前面朝内。