Нужен публичный класс в единстве, но вынужден добавлять статику - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу сделать переменную редактируемой в инспекторе единиц, написав ее как общедоступную переменную - например, public int days = 3 - и затем наличие другой закрытой переменной, которая использует days (и превращает удобный для пользователя ввод в число, которое теперь полезно для моего кода), такой как private int hours = days * 24. Однако я вынужден сделать days a public static int, чтобы он был доступен по уравнению hours. Это означает, что он больше не доступен для изменения в инспекторе. Я думаю, это фундаментальная проблема с моим пониманием c #, и любые советы о том, что я должен делать вместо этого, действительно помогли бы новичку.

public int days = 3;
private int hours = days * 24;

Спасибо!

Ответы [ 2 ]

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

Я думаю, что ключом здесь является то, что C # должен знать, когда на самом деле запустить вашу строку days * 24. Допустим, вы запускаете свою игру, а затем открываете инспектор и меняете значение days - вам, вероятно, понадобится изменить часы, чтобы отразить это тоже.

Самый простой способ сделать это - запустить его, когда вам это нужно - то есть, когда вам требуется значение для «Часов», именно тогда вы запустите days * 24. Лучше всего это сделать с помощью свойства C #:

public int Days = 3;

public int Hours{
    get {
        return Days * 24;
    }
}

Теперь вы можете использовать Hours, как если бы вы использовали поле, и оно всегда будет правильным количеством часов, независимо от того, когда вы измените это поле «Дни», так как оно будет вычисляться по требованию для вас.

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

Было бы намного лучше, если бы вы предоставили полный пример сценария. Внимательно прочитав ваш вопрос, вы делаете следующее:

public int days = 3;
private int hours = days * 24;

Инициализируйте переменную hours в функции, и это должно быть хорошо. Функции Start или Awake обычно используются для чего-то подобного:

public int days = 3;
private int hours;

void Start()
{
    hours = days * 24;
}

Это связано с тем, что для инициализации переменной другой переменной необходимо использовать переменную static или const.

.

Этот пример с const тоже сработал бы:

public const int days = 3;
public int hours = days * 24;
...