Я использую InvokeRepeating(), чтобы вызвать метод в игре. Я вызываю InvokeRepeating() в методе Start() одного из классов GameObject. Чтобы установить параметр repeatRate для InvokeRepeating(), я передаю ему общедоступное поле под названием secondsBetweenBombDrops.
Unity игнорирует значение, указанное мной для secondsBetweenBombDrops в коде, и вместо этого использует некоторое значение по умолчанию (т.е. 1), когда secondsBetweenBombDrops объявляется без статического модификатора:
public float secondsBetweenBombDrops = 10f;
void Start() {
InvokeRepeating("DropBomb", 1f, secondsBetweenBombDrops);
}
Однако, как только я добавлю модификатор static к secondsBetweenBombDrops, код будет вести себя так, как ожидалось, и используется правильное значение 10:
public static float secondsBetweenBombDrops = 10f;
void Start() {
InvokeRepeating("DropBomb", 1f, secondsBetweenBombDrops);
}
Почему для этого поля требуется модификатор static для использования соответствующего значения?
В инспекторе Unity компонент script показывает, что secondsBetweenBombDrops равно 1. Это значение по умолчанию 1 присутствует независимо от того, создаю ли я экземпляр prefab при запуске игры или создаю экземпляры prefab во время игры.