Unity3d 两个游戏对象虽然不在同一位置,但会发生碰撞
我有一个叫做Unity3d 两个游戏对象虽然不在同一位置,但会发生碰撞,unity3d,Unity3d,我有一个叫做球的游戏对象,还有一个叫做地板。从代码中可以看出,当球落地时,应打印输出 无效OnCollisionInter2D(碰撞2D碰撞) { bg=GameObject.Find(bg_名称); 如果(collision.gameObject.tag==“floor”) { //bg.GetComponent().deleteBall(); //bg.GetComponent().recreateBall(); 打印(“球撞到地板”); } if(collision.gameObject.
球的游戏对象
,还有一个叫做地板
。从代码中可以看出,当球落地时,应打印输出
无效OnCollisionInter2D(碰撞2D碰撞)
{
bg=GameObject.Find(bg_名称);
如果(collision.gameObject.tag==“floor”)
{
//bg.GetComponent().deleteBall();
//bg.GetComponent().recreateBall();
打印(“球撞到地板”);
}
if(collision.gameObject.tag==“rope”)
{
bg.GetComponent().ToggleIsShot(false);
}
}
问题是我现在移动了地板,这样球和地板的深度就不同了。尽管两个Gameobjects
不接触,但仍会打印输出。请参见下面的屏幕截图:
打印在左下角。为什么呢
根据下面的注释,z值没有影响。但我也有一个绳子的碰撞检测器,它是一条贝塞尔曲线,上面有一个EdgeCollider2D
。当绳索通过地板时,在OnCollisionInter2D
中不会触发任何动作
void OnCollisionEnter2D(Collision2D collision)
{
bg = GameObject.Find(bg_name);
if (collision.gameObject.tag == "floor")
{
print("floor collision");
bg.GetComponent<ControlGame>().ShootBall();
}
}
无效OnCollisionInter2D(碰撞2D碰撞)
{
bg=GameObject.Find(bg_名称);
如果(collision.gameObject.tag==“floor”)
{
打印(“地板碰撞”);
bg.GetComponent().ShootBall();
}
}
嗯,这些是碰撞的r2d
void OnCollisionEnter2D(Collision2D collision)
{
bg = GameObject.Find(bg_name);
if (collision.gameObject.tag == "floor")
{
print("floor collision");
bg.GetComponent<ControlGame>().ShootBall();
}
}
您只更改了地板的Z(深度)位置,这在2D游戏/2D物理中基本上被完全忽略
正如您在物理2D的GameView中所看到的,对象仍然是对齐和碰撞的
为什么绳子和地板之间的碰撞不起作用
请签出可检测到的碰撞/触发器
&向右箭头;至少有一个对象必须是Rigidbody2D
如果绳子是通过脚本移动的,那么它必须是运动学的&rightarrow;在这种情况下,地板也需要是刚体2d
,而不是运动学
我想它对球的作用很好的原因是因为它已经是一个非运动学的刚体2d
,所以能够检测到与静态碰撞器的碰撞。好的,但另一个问题是绳子没有检测到地板。它可能有另一层吗?或触发器是否启用?是否存在Rigidbody2D?不,它们位于同一层,isTrigger未启用。地板或绳子上没有刚体。绳子能探测到球,所以有东西在工作。尝试添加静态刚体,但没有任何区别。请查看我的更新并签出“我在地板上有一个静态碰撞器,绳子上有一个刚体2D,如果我选择绳子的刚体为动态,它会起作用。”。如果它是动态的或静态的,则不起作用。但在文档中,它说:刚体碰撞器“这是一个带有碰撞器和正常的非运动学刚体的游戏对象。刚体碰撞器完全由物理引擎模拟,可以对脚本施加的碰撞和力作出反应。它们可以与其他对象碰撞(包括静态碰撞器)是使用物理的游戏中最常用的对撞机配置。”