If-Statement не был соблюден - PullRequest
0 голосов
/ 25 мая 2018

в моем проекте 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)" -> "(Clone)", потому чтопрефаб клонируется при инициализации. Код из

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

не готов!Остальной код сделан:

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

1 Ответ

0 голосов
/ 25 мая 2018

Вы должны использовать 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...