Unity 2D: как проверить, было ли собрано определенное количество монет перед загрузкой на следующий уровень?

avatar
eric
9 августа 2021 в 03:31
68
2
0

Как получить количество монет, собранных в скрипте CoinPicker, и получить к нему доступ в скрипте LevelLoader? Вот мой скрипт CoinPicker:

 public class CoinPicker : MonoBehaviour
 {
     public float coin = 0;
     public TextMeshProUGUI textCoins;
     
     
     private void OnTriggerEnter2D(Collider2D other)
     {
         if (other.transform.tag == "Coins")
         {
             coin++;
             textCoins.text = coin.ToString();
             Destroy(other.gameObject);
         }
     }
 
     
 }

Вот мой скрипт LevelLoader:

public class LevelLoader : MonoBehaviour
 {
     public int iLevelToLoad;
     public string sLevelToLoad;
     public bool useIntegerToLoadLevel;
 
     private void OnTriggerEnter2D(Collider2D collision)
     {
         GameObject collisionGameObject = collision.gameObject;
 
         if(collisionGameObject.gameObject.tag == "Player" )
         {
             LoadScene();
         }
     }
     
     void LoadScene()
     {
         if(useIntegerToLoadLevel)
         {
             SceneManager.LoadScene(iLevelToLoad);
         }
         else
         {
             SceneManager.LoadScene(sLevelToLoad);
         }
     }
 }

Пожалуйста, помогите, я слаб в этом :(

Источник
derHugo
9 августа 2021 в 06:18
0

Просто укажите CoinPicker в скрипте LevelLoader... либо через поле в Инспекторе, либо, например, FindObjectOfType и т.д.. тогда у вас есть прямой доступ к его публичным полям

Ответы (2)

avatar
Aditya Galang.
9 августа 2021 в 04:52
1

Вы можете сделать прямой доступ к сборщику монет и получить доступ к монете из загрузчика уровней из CoinPicker.

public class LevelLoader : MonoBehaviour
{
     public CoinPicker CoinPicker;
     public int iLevelToLoad;
     public string sLevelToLoad;
     public bool useIntegerToLoadLevel;

     private void Start()
     {
       Debug.log(CoinPicker.coin); //you can get coin from here
     }
 
     private void OnTriggerEnter2D(Collider2D collision)
     {
         GameObject collisionGameObject = collision.gameObject;
 
         if(collisionGameObject.gameObject.tag == "Player" )
         {
             LoadScene();
         }
     }
     
     void LoadScene()
     {
         if(useIntegerToLoadLevel)
         {
             SceneManager.LoadScene(iLevelToLoad);
         }
         else
         {
             SceneManager.LoadScene(sLevelToLoad);
         }
     }
 }
    
avatar
Joaie Adventure
9 августа 2021 в 04:15
0

Вы можете использовать тот же TextMesh, что и в скрипте Collision. Вы бы просто поставили

public TextMeshProUGUI textCoins;

в поле второго, чтобы textCoins.text было количеством собранных вами монет. Затем перетащите тот же TextMesh в поле TextMesh в редакторе Unity.

Я не могу сказать, для чего вы используете монеты в загрузчике уровней, но если вы хотите проверить количество собранных вами монет, вы просто скажете

if(int.Parse(textCoins.text) == RequiredNumberOfCoins)

Надеюсь, это имеет смысл.

derHugo
9 августа 2021 в 06:17
0

Если вы все равно полагаетесь на общую ссылку, почему бы не иметь прямую ссылку на сценарий CoinPicker, как это предлагается в этом ответе? Переход через синтаксический анализ строки здесь совершенно не нужен, медленный и подверженный ошибкам (например, если OP позже не хочет отображать только необработанное число, а что-то вроде, например, "Coins: " + coin)