C# 在Unity3D中将子对象保持在父对象内

C# 在Unity3D中将子对象保持在父对象内,c#,unity3d,C#,Unity3d,我有一个碰撞R2D在我的2D游戏中制作一个边框。我有另一个Gameobject在这个边界内,用户可以使用虚拟操纵杆上下移动它 现在我想让所有的孩子都保持在这个边界内,当用户向上/向下移动他们时,他们不会进入我的特殊边界,这是一个碰撞的R2D 我曾经尝试过这样做,在我的边界上下使用2gameobject来获取它们的位置,并检查每个子对象,但是如果我有更多的对象,这不是一个好主意 我想做的是像下面的图片一样 我怎么能做到 我建议您(在代码中)始终检查您的游戏对象是否在您的边界内。从这里开始,当位置

我有一个
碰撞R2D
在我的2D游戏中制作一个边框。我有另一个
Gameobject
在这个边界内,用户可以使用虚拟操纵杆上下移动它

现在我想让所有的孩子都保持在这个边界内,当用户向上/向下移动
他们时,他们不会进入我的特殊边界,这是一个
碰撞的R2D

我曾经尝试过这样做,在我的边界上下使用2
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!
}
PolygonCallider2D poly=transform.parent.GetComponent();
//检查位置是否在边界内
if(poly.bounds.Contains(transform.position))
{
//游戏对象在边界内
}
其他的
{
//游戏对象在边界之外!
}
下面是一个简单的示例,说明您将如何执行此操作:

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
}
Vector2运动;
//在这里计算移动
Vector2 newPosition=变换位置+移动;
PolygonCallider2D poly=transform.parent.GetComponent();
if(poly.bounds.Contains(newPosition))
{
transform.position=newPosition;
}
其他的
{
//忽略
}
编辑:

因为我们正在尝试获取
边界。包含
2DCollider
我们必须检查
游戏对象的
矢量2
位置

我建议您(在代码中)始终检查您的游戏对象是否在边界内。从这里开始,当位置超出边界时,只需停止修改位置即可

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!
}
PolygonCallider2D poly=transform.parent.GetComponent();
//检查位置是否在边界内
if(poly.bounds.Contains(transform.position))
{
//游戏对象在边界内
}
其他的
{
//游戏对象在边界之外!
}
下面是一个简单的示例,说明您将如何执行此操作:

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
}
Vector2运动;
//在这里计算移动
Vector2 newPosition=变换位置+移动;
PolygonCallider2D poly=transform.parent.GetComponent();
if(poly.bounds.Contains(newPosition))
{
transform.position=newPosition;
}
其他的
{
//忽略
}
编辑:


因为我们正在尝试获取
边界。包含
2DCollider
我们必须检查
游戏对象的
矢量2
位置

您可以使用4个边碰撞器而不是一个2D碰撞器作为边界

这样,如果游戏对象连接了2D刚体和2D碰撞器,则可以限制游戏对象的移动


碰撞器不会从内部碰撞。

可以使用4个边碰撞器,而不是一个二维碰撞器作为边界

这样,如果游戏对象连接了2D刚体和2D碰撞器,则可以限制游戏对象的移动


碰撞器不会从内部碰撞。

我建议你把问题说清楚:现在很难理解你的目标。考虑添加你已经生成的代码,以及你想要实现的屏幕截图或图形表示。@ Kardux,我认为问题是非常清楚的,这个问题发生在编码之前,我现在没有任何代码。这个问题是在做任何事情之前,在没有任何东西的情况下,你如何询问屏幕截图或代码:)好吧,既然你说“我以前试过这么做[…]这不是一个好主意”,我想在请求帮助之前,我猜你已经制作了一些东西是合法的?此外,快速绘制出您的想法也不太耗时(这是一个您本可以做的示例(不知道我是否正确理解了您的问题))。不管怎样,如果我听起来没有帮助,那我就不好了:我只是给你这个评论,因为这是我在阅读你的问题时的观点。最后,我想提供的答案应该足以解决您的问题;)@卡杜克斯,谢谢。我会在将来使用你的建议,我在我的问题中使用了你的绘画。我建议你把你的问题弄清楚:现在很难理解你的目标是什么。考虑添加你已经生成的代码,以及你想要实现的屏幕截图或图形表示。@ Kardux,我认为问题是非常清楚的,这个问题发生在编码之前,我现在没有任何代码。这个问题是在做任何事情之前,在没有任何东西的情况下,你如何询问屏幕截图或代码:)好吧,既然你说“我以前试过这么做[…]这不是一个好主意”,我想在请求帮助之前,我猜你已经制作了一些东西是合法的?此外,快速绘制出您的想法也不太耗时(这是一个您本可以做的示例(不知道我是否正确理解了您的问题))。不管怎样,如果我听起来没有帮助,那我就不好了:我只是给你这个评论,因为这是我在阅读你的问题时的观点。最后,我想提供的答案应该足以解决您的问题;)@卡杜克斯,谢谢。我将在将来使用你的建议,我在我的问题中使用了你的绘图。这在我的游戏中不起作用。我用2个游戏对象测试了它,使其中一个成为另一个的孩子,我给了这些对象碰撞器,为它们写了上面的代码,但其他的都对我有效。这个答案不是真的,是真的,但家长必须有对撞机。问题是关于获得新的位置。当我用Vector2来寻找游戏对象的新位置时,它起作用了这个链接帮助我找到了问题看:这在我的游戏中不起作用,我用2个游戏对象来测试它,使其中一个成为另一个的子对象,我给了这些对象碰撞器,并为它们写了上面的代码,但是