Как я могу защитить объект от отсутствия на сцене, когда FindingObject - PullRequest
0 голосов
/ 30 апреля 2018

У меня сейчас две сцены. Первый содержит объект «PowerUp». Итак, скрипт:

myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>();

находит объект.

Я изо всех сил пытаюсь понять, как я могу инкапсулировать это так, чтобы во второй сцене я не получал ошибку, потому что объект WithTag ("Fuel") не существует?

Если я использую bool вот так:

 if (!PowerUpExists){ 
    Return;
 } else {
 myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>() 
 }

Будет ли что-то подобное работать? Я не могу понять, как эта логика, потому что, как я могу проверить, если что-то существует, не проверяя, существует ли что-то, если вы поймете мой смысл?

Пожалуйста, помогите, я довольно новичок в этом, учусь, но отнюдь не прогрессировал.

1 Ответ

0 голосов
/ 30 апреля 2018

Просто проверьте, существует ли gameObject:

GameObject powerUpGo = GameObject.FindObjectWithTag("Fuel");
if( powerUpGo != null )
{
    myPowerUp = powerUpGo .GetComponent<AddFuel>() ;
}

Затем при добавлении условия перед использованием myPowerUp:

if( myPowerUp != null )
{
    // Do something with myPowerUp
}

В противном случае, я просто советую вам иметь прямую сериализованную ссылку на ваш объект в инспекторе, чтобы вы могли просто иметь нулевую проверку, когда вам нужно включение (и вам больше не нужно будет звонить Find)

[SerializeField]
private AddFuel myPowerUp ; // Drag & drop the object in the inspector

// ...

if( myPowerUp != null )
{
    // Do something with myPowerUp
}

Последняя возможность, о которой я могу подумать, но требуя гораздо больше «ручной» работы, добавьте логическое значение, которое вы будете проверять в инспекторе в соответствии со сценой, в которой вы находитесь.

[SerializeField]
private bool powerUpExists; // Check / uncheck it in the inspector according to the scene you are working in

// ...

if (!powerUpExists)
{ 
    return;
}
else
{
    myPowerUp = GameObject.FindObjectWithTag("Fuel").GetComponent<AddFuel>() 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...