bugfix> c# > 投稿

Unityプロジェクトでは、いくつかのプレハブにスクリプトが添付されています。数秒ごとにランダムなプレハブが生成されます。これは、添付のスクリプトの一部です。

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.transform.CompareTag("ground"))
    {
        if (transform.gameObject.name == "FallingKeule(Clone)") 
        {
            Destroy(transform.gameObject);
        }
        if (transform.gameObject.name == "FallingHeart(Clone)")
        {
            Destroy(transform.gameObject);
        }
        if (transform.gameObject.name == "FallingCup(Clone)")
        {
            Destroy(transform.gameObject);
        }
        else
        {
            print("You lost a life!");
            Player.GetComponent<Colliding>().LostLife();
            Destroy(transform.gameObject);
        }               
    }
}

GameObjectがランダムに生成され、ヒットした場合、それは「FallingKeule(Clone)」-> 「(クローン)」は、プレハブがコードの初期化によってクローン化されるためです

if (transform.gameObject.name == "FallingKeule(Clone)")

されていません! elseコードが完成しました:

else
{
    print("You lost a life!");
    Player.GetComponent<Colliding>().LostLife();
    Destroy(transform.gameObject);
}

回答 1 件
  • else if を使用する必要があります  ステートメント:

    if (transform.gameObject.name == "FallingKeule(Clone)") 
    {
        Destroy(transform.gameObject);
    }
    else if (transform.gameObject.name == "FallingHeart(Clone)")
    {
        Destroy(transform.gameObject);
    }
    else if (transform.gameObject.name == "FallingCup(Clone)")
    {
        Destroy(transform.gameObject);
    }
    else
    {
        print("You lost a life!");
        Player.GetComponent<Colliding>().Destroy(transform.gameObject);
    }
    
    

    またははるかに良い:

    var gameObjectName = transform.gameObject.name;
    if(gameObjectName == "FallingKeule(Clone)" || gameObjectName == "FallingHeart(Clone)" || gameObjectName == "FallingCup(Clone)")
    {
        Destroy(transform.gameObject);
    }
    else
    {
        print("You lost a life!");
        Player.GetComponent<Colliding>().Destroy(transform.gameObject);
    }
    
    

    あるいは:

    string[] dObjects = new string[] { "FallingKeule(Clone)", "FallingHeart(Clone)", "FallingCup(Clone)" };
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.transform.CompareTag("ground"))
        {
            if(dObjects.Contains(transform.gameObject.name))
            {
                Destroy(transform.gameObject);
            }
            else
            {
                print("You lost a life!");
                Player.GetComponent<Colliding>().Destroy(transform.gameObject);
            }
        }
    }
    
    

あなたの答え