【问题标题】:Unity: Detect which collider component of gameobject is colliding with somethingUnity:检测游戏对象的哪个对撞机组件正在与某物发生碰撞
【发布时间】:2017-11-23 19:34:23
【问题描述】:

这是一个适合标题的问题。但问题是,我如何检测(某个游戏对象的)哪个对撞机与某物发生碰撞?

这是我的示例:我的角色(游戏对象)统一有两个对撞机(BoxCollider2D 和 CapsuleCollider2D),而 capsulecollider 是我角色的脚。例如,我只希望他在脚(cap.collider)与某物碰撞时保持“接地”,或者仅在脚与某物碰撞时才能跳跃,而不仅仅是 BoxCollider2D(身体)。 到目前为止,我使用“OnCollisionEnter2D”函数进行检测,这只显示了另一个对象,以及它是什么等。但我想知道我的哪些角色碰撞了碰撞,所以我可以指定在某些情况下会发生什么我角色的某些区域正在发生碰撞。

一个问题的例子:我的角色可以触摸墙壁(意味着 BoxCollider2D 被击中,但脚没有被击中)并且可以使用跳跃脚本,因为他只是通过触摸某物(使用 box coll)而“接地”,然后转移到我的函数“OnCollisionEnter2D”,该函数将 bool isGrounded 设置为 true。

【问题讨论】:

  • This API doc 提到了一个collider,这是与otherCollider 碰撞的碰撞器(这句话是什么...)。你不能只检查collider是什么类型,看看它是BoxCollider2D还是CapsuleCollider2D?
  • 我明白你在想什么,但我一直在我的函数“OnCollisionEnter2D”中尝试一些替代方案等。您能否提供一个示例,说明您在“OnCollisionEnter2D”或类似函数中的代码中的含义。 :)
  • 我现在没有时间,但我希望像 OnCollisionEnter2D(Collision2D collision) { if (collision.collider is BoxCollider2D) { // Probably your character } else if (collision.collider is CapsuleCollider2D) { // Feet? } } 这样的东西可以工作
  • 我明白你在这里写的内容和正确的。但是您正在检查此方程式中的第二个碰撞对象。我想找到我的角色的参考。如果我的角色撞到一棵树,你的变量“碰撞”就是树。这只是因为“OnCollisionEnter2D”只有一个参数,即脚本中的“传入”碰撞对象(当前对象)。
  • 如果我没弄错otherCollider 是您示例中树的对撞机,如果此脚本位于角色处。另一方面,collider 在角色上。

标签: c# visual-studio unity3d collision-detection collision


【解决方案1】:

我找到了答案。通过在“OnCollisionEnter2D”函数中编写此代码,我设法让它工作!这是我需要的“otherCollider”变量。

    void OnCollisionEnter2D(Collision2D col)
{
   // Debug.Log("Player has collided with " + col.collider.name);
    isGrounded = true;
    marioFalling = false;
    gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(moveX * marioSpeed, 0); // Väldigt viktig, återställer hastigheten (i y) till noll, istället för att lägga till tidigare hastighet på nästa hopp.

    if (col.otherCollider is BoxCollider2D)
    {
        Debug.Log("Marios body is being tickled");
    }

    if (col.otherCollider is CapsuleCollider2D)
    {
        Debug.Log("Marios feet is being touched");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多