我有一个Collider2D
在我的2D游戏中制作边框。我在此边框内有另一个Gameobject
,用户可以使用虚拟操纵杆向上/向下移动它。
现在我希望将所有孩子保持在此边框内,当用户移动up/down
时,他们不会将我的特殊边框设为Collider2D
。
我之前尝试过这样做,在我的边框顶部和下边使用2 gameobject
来获取它们的位置并检查每个子对象,但如果我有更多的对象,这不是一个好主意。
我想做的就像下面的图片
我怎么能这样做?
答案 0 :(得分:3)
我建议您(在您的代码中)始终检查您的GameObject是否在您的范围内。从那里开始,当它超出界限时,只需停止修改位置。
PolygonCollider2D poly = transform.parent.GetComponent<PolygonCollider2D>();
// Check if the position is inside of the bounds
if (poly.bounds.Contains(transform.position))
{
// GameObject is inside of the bounds
}
else
{
// GameObject is outside of the bounds!
}
一个快速举例说明如何做到这一点:
Vector2 movement;
// Calculate movement here
Vector2 newPosition = transform.position + movement;
PolygonCollider2D poly = transform.parent.GetComponent<PolygonCollider2D>();
if (poly.bounds.Contains(newPosition))
{
transform.position = newPosition;
}
else
{
// ignore
}
修改强>
因为我们想要获得Bounds.Contain
2DCollider
,我们必须检查Vector2
的{{1}}位置
答案 1 :(得分:2)
您可以使用4个边缘碰撞器而不是一个2D碰撞器作为边框。
这样,如果您的GameObject附加了2D Rigidbody和2D Collider,您可以限制GameObject的移动。
碰撞者不会从内部发生碰撞。