Unity:检测gameobject的哪个碰撞器组件与某些物体发生碰撞

时间:2017-11-23 19:34:23

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

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

继承我的榜样:我的角色(游戏对象)在团结中有两个碰撞器(BoxCollider2D& CapsuleCollider2D),而capsulecollider是我角色的脚。我只希望他保持“接地”,如果脚(cap.collider)与某物碰撞,或者只有在脚与某物碰撞时才能跳,而不仅仅是BoxCollider2D(身体)。 到目前为止,我使用“OnCollisionEnter2D”功能来检测,并且只显示另一个对象,它是什么等等。但是我想知道我的哪些角色碰撞器碰撞了,所以我可以指定在确定时会发生什么我的角色区域正在碰撞。

关于问题的示例:我的角色可以触摸墙(意味着BoxCollider2D已被击中,但不是脚)并且可以使用跳转脚本,因为他只是通过触摸某些东西(带有盒子)来“接地”,然后转移到我的函数“OnCollisionEnter2D”,将bool isGrounded设置为true。

1 个答案:

答案 0 :(得分:0)

我找到了答案。通过在“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");
    }
}