Как мне установить переменную во время выполнения в методе Start() или awake, который я могу использовать в Update()?

#c# #unity3d

#c# #unity3d

Вопрос:

Как мне установить переменную во время выполнения в методе Start() или awake, который я могу использовать в Update()?

Вот что я пробовал.

 public class Unlock : MonoBehaviour
{
    // I want to set this to a random number on start or awake
    public string password;

   
    void Start()
    {
        // So I set a string of a random number to compare later to a text box.
        string password = (Random.Range(10, 350) / 10 * 10 ).ToString();
        print(password);
    }
    // Update is called once per frame
    void Update()
    {
        // I can never get this to print the randomly set number. Please help :)
        print(password)  
    }
}
  

Комментарии:

1. Классический случай затенения существующего поля. Ваш local string password скрывает поле класса внутри Start -> внутри Start имени password , которое всегда ссылается на локальную переменную, при Update доступе к полю класса с тем же именем, которое никогда не присваивается.

Ответ №1:

Вы объявили локальную переменную, вызываемую password in Start() , затеняющую глобальную версию password . Простое удаление объявления внутри Start() решит вашу проблему:

     void Start()
    {
        // So I set a string of a random number to compare later to a text box.
        password = (Random.Range(10, 350) / 10 * 10 ).ToString();   // like so
        print(password);
    }
  

Комментарии:

1. ХОРОШО, я ЭТО ИСПРАВИЛ! Мне просто нужно было запустить строку кода в методе, который возвращал строку. Запустите метод в start() / awake(), Тогда я смогу получить доступ к возвращаемому значению в Update() … derp :/

2. @WarSaw нет .. ваша ошибка заключалась скорее в затенении существующего поля путем создания локальной переменной с тем же именем … вам нужно было только удалить string from string password = ... в Start

Ответ №2:

 public class GameplayTaskManager : MonoBehaviour
{
    
    public string password;

    // I made a new method that returned the value I wanted.
    string Password()
    {
        // This gets a string of a random number
        password = ((Random.Range(10, 350) / 10) * 10).ToString();
        return password;
    }
   
    void Start()
    {
        //Sets the string of the number one time
        Password();
    }

 void Update()
    {
        //This returns the value in start() not zero like before :)
        print(password);
    }