В сценарии Unity C# у меня есть объект игрового контроллера Singleton, в котором хранятся игровые переменные, но я получаю странное поведение при доступе к ним в функции-члене. Он печатает инициализированное значение, а не текущее. Однако в функции обновления он печатает правильное значение для каждого кадра. Я подвел итоги ниже. Класс контроллера имеет статическую ссылку на себя. Если вам нужно знать дополнительные сведения, вы можете спросить. Я новичок в C# и Unity, поэтому мне может не хватать какого-то очевидного ответа.Невозможно получить доступ к переменной класса в функции-члене
Благодаря
public class controller : MonoBehaviour {
public int[] star = new int[64];
void Start(){ /* calls another function to set 0 for each star index */ }
void Update(){ // during gameplay star[0] gets a value of 1
print(star[0]); // prints correct value which is 1
}
public void checkValue(){
print(star[0]); // prints 0 incorrectly which should be 1
}
}
Я нашел проблему, но я не знаю, как ее решить. Функция checkValue запускается при нажатии кнопки и возвращает правильное значение, если оно было вызвано из обновления. Не знаю, что вызывает его. – Sangratura
Пуск должен быть no-op, так как массив всегда инициализируется нулем. В противном случае происходит что-то, что не видно в этом фрагменте кода. –
Это тот же самый экземпляр 'controller' во всех случаях. Каждый экземпляр имеет свое собственное поле («переменная класса»), когда вы используете нестатический член 'star'. –