Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 两个游戏对象虽然不在同一位置,但会发生碰撞_Unity3d - Fatal编程技术网

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,如果我选择绳子的刚体为动态,它会起作用。”。如果它是动态的或静态的,则不起作用。但在文档中,它说:刚体碰撞器“这是一个带有碰撞器和正常的非运动学刚体的游戏对象。刚体碰撞器完全由物理引擎模拟,可以对脚本施加的碰撞和力作出反应。它们可以与其他对象碰撞(包括静态碰撞器)是使用物理的游戏中最常用的对撞机配置。”