我有一个叫Gameobject
的{{1}}和另一个叫ball
的人。从代码中可以看出,当球撞击地板时,应打印输出。
floor
问题是我现在移动了地板,因此球和地板的深度不同。尽管如此,尽管两个void OnCollisionEnter2D(Collision2D collision)
{
bg = GameObject.Find(bg_name);
if (collision.gameObject.tag == "floor")
{
//bg.GetComponent<ControlGame>().deleteBall();
//bg.GetComponent<ControlGame>().recreateBall();
print("Ball hit floor");
}
if (collision.gameObject.tag == "rope")
{
bg.GetComponent<ControlGame>().ToggleIsShot(false);
}
}
没有碰触,仍可以进行打印。请参阅以下屏幕截图:
打印位于左下角。为什么会这样?
根据下面的注释,z值无效。但是我还有一个用于绳索的碰撞检测器,它是一个附有Gameobjects
的贝塞尔曲线。绳索穿过地板时,EdgeCollider2D
中什么也不会触发。
onCollisionEnter2D
答案 0 :(得分:1)
好吧,这些是Collider2D
。
您只更改了地板的 Z (深度)位置,该位置在2D游戏/ 2D物理学中基本上被完全忽略了。
您还可以在Physics 2D的GameView中看到对象仍然对齐和碰撞。
为什么它也不能用于绳索和地板之间的碰撞?
请检出Collision Action Matrix可以检测到碰撞/触发的位置。
→至少一个对象必须是Rigidbody2D
。
如果绳索是通过脚本移动,则必须为Kinematic
→在这种情况下,下限也必须为Rigidbody2D
而不是Kinematic
。
我猜想它对球的作用还不错,是因为它已经是非运动学的Rigidbody2D
,因此能够检测与静态对撞机的碰撞。