Unity3d 游戏对象未检测到与地板的碰撞

Unity3d 游戏对象未检测到与地板的碰撞,unity3d,2d,graphics2d,gameobject,Unity3d,2d,Graphics2d,Gameobject,我的游戏对象开始躺在地板上。在长方体碰撞器上,IsKinetic设置为true,触发器设置为true 当玩家触摸对撞机时。它将游戏对象向下移动到地板上。然后我将iskinetic设置为false,将触发器设置为false。这将迫使游戏对象坠落,直到它撞到地板并停止。我的问题是在游戏对象落地并停止后。我无法让游戏对象识别它与地板碰撞。我在OnCollisionInter2d和OnCollisionStay2D中有一个Debug.Log语句。当他们触摸时,Debug.Log不会出现在控制台中。为什么

我的游戏对象开始躺在地板上。在长方体碰撞器上,IsKinetic设置为true,触发器设置为true

当玩家触摸对撞机时。它将游戏对象向下移动到地板上。然后我将iskinetic设置为false,将触发器设置为false。这将迫使游戏对象坠落,直到它撞到地板并停止。我的问题是在游戏对象落地并停止后。我无法让游戏对象识别它与地板碰撞。我在OnCollisionInter2d和OnCollisionStay2D中有一个Debug.Log语句。当他们触摸时,Debug.Log不会出现在控制台中。为什么会这样

游戏对象有一个刚体和长方体碰撞器。地板上还有一个长方体碰撞器和刚体

void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag == "Player") 
    {
        Debug.Log ("Player is touching the section");
        //sectionRigidbody.isKinematic = true;
        if (readyToDrop == false)
          //moves player
        transform.position += newPosition;
        readyToDrop = true;
        sectionRigidbody.isKinematic = false;
        sectionBoxCollider.isTrigger = false;
        sectionRigidbody.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
        //sectionRigidbody.isKinematic = true;
    }
}

void OnCollisionEnter2D(Collider2D col)
{
    if (col.gameObject.tag == "Floor") 
    {
        Debug.Log ("section is touching the floor");
    }
}

void OnCollisionStay2D(Collider2D col)
{
    if (col.gameObject.tag == "Floor") 
    {
        Debug.Log ("section is touching the floor");
    }
}

使用带有参数的冲突回调函数时,请注意

作为参数。你说得对

并且不作为参数。这就是你失败的地方

听起来很简单,但不一样

如果参数错误,则不会调用它们

在Unity的最新版本中,当您犯此错误时,将在编辑器中抛出错误。它看起来像这样:

脚本错误:OnCollisionInter2D此消息参数必须为 类型:消息将被忽略

脚本错误:OnCollisionStay2D此消息参数必须为 类型:消息将被忽略

解决方案

替换

void-oncollisioninter2d(碰撞的r2d列)
void-OnCollisionStay2D(碰撞的r2d列)


无效OnCollisionInter2d(Collision2D列)
无效OnCollisionStay2D(Collision2D列)

使用带参数的冲突回调函数时请注意

作为参数。你说得对

并且不作为参数。这就是你失败的地方

听起来很简单,但不一样

如果参数错误,则不会调用它们

在Unity的最新版本中,当您犯此错误时,将在编辑器中抛出错误。它看起来像这样:

脚本错误:OnCollisionInter2D此消息参数必须为 类型:消息将被忽略

脚本错误:OnCollisionStay2D此消息参数必须为 类型:消息将被忽略

解决方案

替换

void-oncollisioninter2d(碰撞的r2d列)
void-OnCollisionStay2D(碰撞的r2d列)


无效OnCollisionInter2d(Collision2D列)
无效OnCollisionStay2D(Collision2D列)

您提到触发器设置为true

触发器不会注册与传入刚体的碰撞。相反,当刚体进入或退出触发体积时,它会发送OnTiggerEnter、OnTiggerExit和OnTiggerStay消息


来源:

您提到触发器设置为true

触发器不会注册与传入刚体的碰撞。相反,当刚体进入或退出触发体积时,它会发送OnTiggerEnter、OnTiggerExit和OnTiggerStay消息


来源:

将所有调试日志放在if tag语句之外,然后再次测试将其移到外面,但仍然没有任何结果@ProgrammerPost ScreenShow附加到GaemObject的组件。@程序员我已使用您请求的图片编辑了原始版本。我检查了您的图片,设置看起来很好。你说的是“我的游戏对象开始时躺在地板上。在框对撞机上,IsKinetic设置为true,触发器设置为true”但根据您刚刚上传的图像,这不是真的。将所有调试日志放在if tag语句之外,然后再次测试将其移到外面,仍然没有任何内容@ProgrammerPost Screenshot附加在GaemObject上的组件。@Programmer我用您请求的图片编辑了原始版本,我检查了你的照片,设置看起来很好。你说的是“我的游戏对象开始时躺在地板上。在框对撞机上,IsKinetic设置为true,触发器设置为true”,但根据你刚刚上传的图像,这不是真的