【问题标题】:Bullet destroy 2 game object intent one unity 2D子弹摧毁 2 游戏对象意图一统一 2D
【发布时间】:2020-02-27 03:19:04
【问题描述】:

当我的子弹与一个球相撞时,如果附近或同一位置有 2 个球,则所有对象都会同时被摧毁。我在脚本中设置了当子弹与其他玩家相撞时它将被摧毁。

我试图用 else if 检查每种球的类型

 if(other.gameObject.tag == "yerrow")
    { 
        if (ballType >= 0 && ballType < 4)
        {

            clone1 = (GameObject)Instantiate(_ball, gameObject.transform.position, Quaternion.identity);
            clone1.gameObject.GetComponent<Balloon_Behave>().ballMove = -4;
            clone1.gameObject.GetComponent<Balloon_Behave>().transform.position = new Vector2(transform.position.x - Random.Range(0, 0.5f), transform.position.y - Random.Range(0,1));

            clone2 = Instantiate(_ball, gameObject.transform.position, Quaternion.identity);

            Destroy(this.gameObject);
        }
        else if (ballType == 4)
        {
            Destroy(this.gameObject);
        }
        Debug.Log("Yerrow COLl");
    }

Yerrow Script 自毁

  private void OnTriggerEnter2D(Collider2D other)
      {  
         if (other.gameObject.tag != "Player")
          {
             Destroy(this.gameObject);
             player.CanFire = true;
          }
      }

编辑注意:每个球与被欺负的球相撞都是破坏意图。我想用一颗子弹摧毁一个物体

【问题讨论】:

  • 这可能是因为你的子弹太快了,在它检测到第一次碰撞之前它注册了另一个。您可以做的是在与某物碰撞时禁用对撞机,它应该防止两次射击
  • 耶罗、子弹、球、球员,4种还是只有2种?
  • 我只是尝试将速度降低得太慢并尝试一下。结果是一样的。
  • @shingo yerrow 是子弹的标签,球是玩家短的目标对象
  • 这是关于c#,而不是unityscript

标签: c# unity3d


【解决方案1】:

您可以将这两个功能结合起来,使用活动标志来检查子弹状态。

//Check if the bullet is active, then destroy the ball.
if(other.gameObject.tag == "yerrow" && other.gameObject.activeSelf)
{ 
    if (ballType >= 0 && ballType < 4)
    {
        ...
        Destroy(this.gameObject);
    }
    else if (ballType == 4)
    {
        Destroy(this.gameObject);
    }

    //Destroy and deactive the bullet here
    Destroy(other.gameObject);
    other.gameObject.SetActive(false);
}

【讨论】:

  • 没有任何改变仍然针对一个以上的对象
【解决方案2】:

在球上,在里面OnCollisionEnter2D

if(collision.collider.tag=="BulletTag")
{
     Destroy(collision.collider.gameObject);
     Destroy(gameObject);
}

仅将其应用于

【讨论】:

    【解决方案3】:

    设置bool来检查ball子弹是否击中球,如果子弹与球相撞则设为false。

     public Player _player
    
     void start(){
     _powerUP = GameObject.Find("player").GetComponent<Player>();
     }
    
     if(other.gameObject.tag == "yerrow" && _player.canBe == true)
        {
            _player.canBe = false; // False just after hit
            if (ballType >= 0 && ballType < 4)
            {
                clone1 = (GameObject) Instantiate(_ball, gameObject.transform.position, Quaternion.identity);
                clone1.gameObject.GetComponent<Balloon_Behave>().ballMove = -4;
                clone1.gameObject.GetComponent<Balloon_Behave>().transform.position = new Vector2(transform.position.x - Random.Range(0, 1f), transform.position.y - Random.Range(0,1));
                 Instantiate(_ball, gameObject.transform.position, Quaternion.identity);
                Destroy(this.gameObject);
            }
            else if(ballType == 4)
            {
                Destroy(this.gameObject);
            }  
        }
    

    不要在 Bullet On 触发器中设置此值,在调用 Instantiate Clone 时设置为 true,然后它应该可以找到。

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2013-04-14
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多