Неправильное число, преобразовывающее int в строку c # - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть простой счетчик монет в игре 2d Unity.Но одна монета считается как 2. Я думаю, что это из-за неправильного преобразования int в строку.

public GameObject coin; // Gameobject with coin
public Text CoinCounter; // Text with counter that shows in game
private float TotalCounter = 0; // Float for counting total amount of picked up coins

{
   TotalCounter = Convert.ToInt32((CoinCounter.text)); // Converting text counter to Numbers
}

private void Update()
{

    TotalCounter = Convert.ToInt32((CoinCounter.text)); // Updating Counter evry frame update 
    Debug.Log(TotalCounter); // Showing Counter  in Console 
}

private void OnTriggerEnter2D(Collider2D collision)
{
    TotalCounter = (TotalCounter + 1); // adding 1 to total amount when player touching coin 
    CoinCounter.text = TotalCounter.ToString(); // Converting to Text, and showing up in UI





    coin.SetActive(false); // Hiding coin


}

Итак, в журнале отладки отображается правильная общая сумма, но в интерфейсе отображается неправильный номер.Например, когда общая сумма равна 1, она показывает 2 и т. Д.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Лучше записать код вашего конвертора в триггер void, после этого проверьте его;это может произойти из-за функции обновления, попробуйте вот так и проверьте снова: `

public GameObject coin;
public Text CoinCounter;
private float TotalCounter = 0; 
private void Update()
{}
private void OnTriggerEnter2D(Collider2D collision)
{
    TotalCounter = (TotalCounter + 1); 
    Debug.Log(TotalCounter); 
    CoinCounter.text = TotalCounter.ToString(); 
    Debug.Log(CoinCounter.text);
    coin.SetActive(false); 
}

`

0 голосов
/ 23 февраля 2019

Проблема была не в конвертации, триггер работал дважды.Нужно проверить, включена ли монета, прежде чем ее отключать и добавлять в счетчик монет.Например:

 if (coin.activeSelf)
  {
      coin.SetActive(false);

      Debug.Log("Object is not active ");

      TotalCounter += 1;
      Debug.Log("Total Counter + :" + TotalCounter);
      CoinCounter.text = TotalCounter.ToString();
      Debug.Log("Text after +:" + CoinCounter.text);
  }
0 голосов
/ 22 февраля 2019

Вам не нужно делать это в Update, но только в том случае, если вы действительно измените его.

Вероятно, вы ищете метод int.TryParse

вы должны использовать int для сумм (если только у вас не будет таких значений, как 1.5 монет позже)

Чем вы выполняете свой код каждый раз, когда он сталкивается ... с чем-либо.Вместо этого вы должны столкнуться только с монетой.Либо используйте теги, либо сравните со ссылочным значением в вашем случае

public GameObject Coin; // Gameobject with coin
public Text CoinCounter; // Text with counter that shows in game
private int _totalCounter = 0; // Int for counting total amount of picked up coins

// I guess it's supposed to be Start here
void Start()
{
   // Converting text counter to Numbers
   int.TryParse(CoinCounter.text, out _totalCounter); 
}

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.gameObject != Coin) return;

    // later this should probably rather be
    //if(collision.gameObject.tag != "Coin") return

    _totalCounter += 1; // adding 1 to total amount when player touching coin 
    CoinCounter.text = _totalCounter.ToString(); // Converting to Text, and showing up in UI

    Coin.SetActive(false); // Hiding coin

    // later this should probably rather be
    //collision.gameObject.SetActive(false);
}
...