【问题标题】:Unity - Collider2D not considered in collision check anymore after disabling and enablingUnity - 在禁用和启用后,碰撞检查中不再考虑 Collider2D
【发布时间】:2016-09-22 20:30:08
【问题描述】:

我有一个球员,他周围有一个盾牌。当存在盾牌时,它会阻挡炮弹。我的 CollisionEnter 代码是

if ((col.collider.gameObject.tag == "hurt")  && (col.collider.IsTouching(shield) == false))
{hurt();}

如果我在默认情况下已启用盾牌的情况下开始关卡,那就太好了。它可以阻挡伤害,弹丸消失。但是,如果我从一开始就禁用它然后启用它,它……无论如何都会伤害我。即使“盾牌”仍被标记为 Collider2D,并且该 Collider 已启用。我不知道该怎么做。感谢您的帮助!

这是我的播放器属性的图像:

这是禁用/启用防护罩后不当行为的 GIF:

这是碰撞检查的完整代码。

void OnCollisionEnter2D(Collision2D col)
{   
    if ((col.collider.gameObject.tag == "hurt_insta") && (col.collider.IsTouching(shield) == false))

    {



        Instantiate(prefab,transform.position,transform.rotation);
        transform.position = new Vector3 (300, 300, transform.position.z);
        Vector2 tempxy = new Vector2 (transform.position.x, transform.position.y);
        GameObject.Find ("Main Camera").GetComponent<CameraFollow> ().target = null;
        PlayerSolid.GetComponent<Renderer> ().enabled = false;
        StartCoroutine (Death_prodleva4bit ());


    }


    if ((col.collider.gameObject.tag == "hurt")  && (col.collider.IsTouching(shield) == false))
    { 


        Instantiate(prefab,transform.position,transform.rotation);

        //if (PlayerSolid.transform.localScale.y > 0f) { 
        //  PlayerSolid.transform.localScale -= new Vector3 (0f, 0.36f);
        //} 

        //if (actual_bit == player_bits [8]  ) {
        if (n > 6) {
            transform.position = new Vector3 (300, 300, transform.position.z);
            Vector2 tempxy = new Vector2 (transform.position.x, transform.position.y);
            GameObject.Find ("Main Camera").GetComponent<CameraFollow> ().target = null;
            PlayerSolid.GetComponent<Renderer> ().enabled = false;



            StartCoroutine (Death_prodleva4bit ());
        } 

 else {
            hit = true;
            HURT (2);

            //if (n < 7) {
        //      HURT(3);
        //}


        }

但它确实可以正常工作 - 从一开始就启用它没有问题。只有在开始关卡时没有立即唤醒它才会发生。

【问题讨论】:

  • 您能否提供播放器属性的图像,以及调用此代码的更完整示例?这将为问题可能是什么提供一些线索。
  • puu.sh/rje0M/90a5b4ea63.png 这是玩家(粉红色)、盾牌和玩家属性。 Player_collisions 中有“盾牌”公共 Collider2D,它被分配给盾牌多边形对撞机。碰撞代码也在 Player_collisions_4bit 中,它在 void OnCollisionEnter2D(Collision2D col) 中,每次带有 HURT 标签的射弹碰到我时都会调用它,它恰好不是盾牌。由于一些碰撞原因,盾牌在 Player 中是一个孩子。
  • 我想到了一个快速添加 - 一个 gif:puu.sh/rjezQ/4d34afd244.gif
  • 如何启用/禁用它?什么代码?还有什么时候启用禁用它?
  • 我基本上禁用/启用它,就像它在 gif 中一样。在游戏中,我让触发器为我做这件事。但它做同样的事情。

标签: c# unity3d collision


【解决方案1】:

我又试了几次,它似乎真的被修复了——所以,出于某种原因,我在 IsTouching 中询问的对象需要一个 RIGIDBODY。我还是不明白,因为如果我带着盾牌开始游戏,它就完美无缺!尽管如此,这解决了它!

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多