【问题标题】:Reset IgnoreCollision in Unity在 Unity 中重置 IgnoreCollision
【发布时间】:2020-06-24 23:04:58
【问题描述】:

我试图让我的角色在Unity 中进行投掷攻击,我想在角色与敌人发生碰撞时忽略boxCollider2D 的碰撞检测,然后撤消忽略。到目前为止,忽略冲突正在工作,但它没有恢复到检测。所以在第一次成功的投掷攻击后,我的角色可以穿过敌人而不是碰撞。下面是我的代码,

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 来重新启用碰撞检测?我是团结的新手,所以任何建议都会非常有帮助。谢谢!

【问题讨论】:

  • 事情是,如果你忽略碰撞,你可能不会得到OnCollisionExit2D ...
  • 那么如果没有OnCollisionExit2D,我该如何解决这个问题?

标签: c# unity3d


【解决方案1】:

希望你能理解

// 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;
    }

【讨论】:

  • 非常感谢!它的工作方式正是我想要的。只是一个小提示,我必须在OnTriggerEnter2D 方法上设置enemy.Hurt(),因为现在角色的碰撞在下降攻击期间触发。
【解决方案2】:

想到的一个解决方案是在 y 轴上绑定位置,然后临时设置对撞机触发。你绑定了 y,这样玩家就不会从地板上掉下来 否则你可以检查你的动画何时结束并将碰撞器设置回检测

【讨论】:

  • 谢谢,这看起来很有希望,我试过对敌人使用触发器,但它会掉下来。因为我是 Unity 的新手,所以从来没有想过限制 y。你能告诉我你提供的建议的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2017-02-03
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多