Я использую 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 во время игры.