C# 在统一中重置碰撞

C# 在统一中重置碰撞,c#,unity3d,C#,Unity3d,我试图让我的角色在Unity中进行跌落攻击,当角色和敌人发生碰撞时,我想忽略BoxCollizedR2D的碰撞检测,然后撤销忽略。到目前为止,“忽略”碰撞仍在工作,但不会恢复到检测状态。因此,在第一次成功的空投攻击后,我的角色可以穿过敌人而不是碰撞。下面是我的代码 private Rigidbody2D rb; private Animator anm; private Collider2D coll; private enum State {idle, running, jumping, at

我试图让我的角色在Unity中进行跌落攻击,当角色和敌人发生碰撞时,我想忽略BoxCollizedR2D的碰撞检测,然后撤销忽略。到目前为止,“忽略”碰撞仍在工作,但不会恢复到检测状态。因此,在第一次成功的空投攻击后,我的角色可以穿过敌人而不是碰撞。下面是我的代码

private Rigidbody2D rb;
private Animator anm;
private Collider2D coll;
private enum State {idle, running, jumping, attacking, falling, hurt}

private void OnCollisionEnter2D(Collision2D other) {
    if (other.gameObject.tag == "Enemy") {
        Enemy enemy = other.gameObject.GetComponent<Enemy>();

        if (state == State.falling && anm.GetBool("dropAtk")) {  // hurt enemy if drop attack
            enemy.Hurt();
            Physics2D.IgnoreCollision(other.gameObject.GetComponent<Collider2D>(), GetComponent<Collider2D>(), true);
        } else {  // take damange
            if (other.gameObject.transform.position.x > transform.position.x) {
                PlayerHurt("right");
            } else {
                PlayerHurt("left");
            }
        }
    }
}

private void OnCollisionExit2D(Collision2D other) {
    if (other.gameObject.tag == "Enemy") {
        if (coll.IsTouchingLayers(ground)) {
            Physics2D.IgnoreCollision(other.gameObject.GetComponent<Collider2D>(), GetComponent<Collider2D>(), false);
        }
    }
}

当角色触地时,如何通过关闭IgnoreCollision来重新启用碰撞检测?我是unity的新手,所以任何建议都会非常有用。谢谢大家!

想到的解决方案是在y轴上绑定位置,然后临时将碰撞器设置为触发。你绑住了y,这样球员就不会从地板上摔下来 否则,您可以检查动画何时结束,并将碰撞器设置回“检测”(Detection)

希望您能理解

// Update is called once per frame
    void FixedUpdate()
    {
        if(state==dropattck)
        {
            ChangeTrigger(player, true);
            if(player.transform.position.y<floorvalue/*check your floor value*/)
            {
                transform.position.y = floorvalue;
            }
        }else
        {
            ChangeTrigger(player, false);
        }
    }
    public void ChangeTrigger(GameObject obj,bool tf)
    {
        if(obj.GetComponent<Collider2D>().isTrigger!=tf)
            obj.GetComponent<Collider2D>().isTrigger = tf;
    }

问题是,如果你忽略碰撞,你可能不会得到OnCollisionExit2D…那么我如何在没有OnCollisionExit2D的情况下修复这个问题呢?谢谢,这看起来很有希望,我试着对敌人使用触发器,但它使它坠落。因为我是新来的统一体,所以从来没有想过要跨越y。你能给我看看你提供的建议的代码吗?非常感谢!这正是我想要的。只是一个小提示,我必须设置敌人。伤害在OnTriggerEnter2D方法上,因为现在角色的碰撞是在投掷攻击中触发的。