尽管两个Gameobject不在同一地点,但它们发生了碰撞

时间:2019-10-06 14:30:38

标签: unity3d

我有一个叫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); } } 没有碰触,仍可以进行打印。请参阅以下屏幕截图: enter image description here Printout is made as if a collision has occurred.

打印位于左下角。为什么会这样?

根据下面的注释,z值无效。但是我还有一个用于绳索的碰撞检测器,它是一个附有Gameobjects的贝塞尔曲线。绳索穿过地板时,EdgeCollider2D中什么也不会触发。

onCollisionEnter2D

1 个答案:

答案 0 :(得分:1)

好吧,这些是Collider2D

您只更改了地板的 Z (深度)位置,该位置在2D游戏/ 2D物理学中基本上被完全忽略了。

您还可以在Physics 2D的GameView中看到对象仍然对齐和碰撞。


  

为什么它也不能用于绳索和地板之间的碰撞?

请检出Collision Action Matrix可以检测到碰撞/触发的位置。

→至少一个对象必须是Rigidbody2D

如果绳索是通过脚本移动,则必须为Kinematic→在这种情况下,下限也必须为Rigidbody2D而不是Kinematic

我猜想它对球的作用还不错,是因为它已经是非运动学的Rigidbody2D,因此能够检测与静态对撞机的碰撞。