Beispiel #1
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("Box"))
        {
            if (collision.transform.position.y >= transform.position.y + 0.7f)
            {
                ItemBox box = collision.transform.GetComponent <ItemBox>();
                if (box)
                {
                    box.OnHeadbutted();
                }
            }
        }

        if (collision.gameObject.layer == LayerMask.NameToLayer("Item"))
        {
            Item item = collision.transform.GetComponent <Item>();
            if (item)
            {
                item.OnItemGot(this);
            }
        }

        // 被敌人Enemy碰到
        if ((1 << collision.gameObject.layer & LayerMask.GetMask("Enemy", "Boss")) != 0)
        {
            // 如果在空中,要先检测是不是脚底踩到敌人
            if (cc.curMoveStatus == MoveStatus.Air)
            {
                float w = 0.3f;
                if (transform.localScale.x > 1.1f)
                {
                    w = 0.5f;
                }
                Collider2D[] colliders = Physics2D.OverlapBoxAll(groundCheck.position, new Vector2(w, 0.2f), 0, LayerMask.GetMask("Enemy", "Boss"));
                foreach (Collider2D c in colliders)
                {
                    RoleDie rd = c.GetComponent <RoleDie>();
                    if (rd != null)
                    {
                        rd.Die(c.transform);
                        // 反弹
                        rigid.velocity = new Vector2(rigid.velocity.x, 0);
                        rigid.AddForce(new Vector2(0, 300));
                    }
                }
                if (colliders.Length > 0)
                {
                    return;
                }
            }

            // 运行到这里说明没踩到敌人,碰撞死亡
            dead = true;
            Invoke("ResetGame", 3);
            BGMusic.Instance.PlayDeadMusic();
        }
    }