Я не могу реализовать задержку на моем персонаже - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь сделать так, чтобы мои персонажи не продолжались вечно, но имели определенную задержку, а затем снова могли бросаться. Мой персонаж иногда решает задержку, а затем, когда я нажимаю клавишу, он будет непрерывно прерываться без задержки. Может кто-нибудь помочь мне решить это? Спасибо.

edit. Кто-то сказал мне, чтобы я начал использовать сопрограммы, но я вроде не уверен, как это работает, я отредактировал код, чтобы использовать «yield», но мне тоже неясно, как это работает. Может кто-нибудь сказать мне, если это правильно для того, что я хочу и как это исправить? Спасибо

if (hasTeleportedRecently == false)
        {
            transform.position = transform.position + transportVector;
            hasTeleportedRecently = true;
            yield return 3;
            hasTeleportedRecently = false;
        }

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Вы можете сделать это без сопрограмм. Создайте поле типа float, в котором вы сохраняете время, когда телепорт снова становится доступным, и сравниваете текущее время с ним, когда игрок пытается телепортироваться:

float now = Time.time;
if (now >= teleportAvailableAt) {
    transform.position += transportVector;
    teleportAvailableAt = now + 3f;
}

Совет:

Не сравнивайте логические значения с true или false. Пропустите == true в целом и замените == false на оператор !. Он короче и менее подвержен ошибкам (вы можете случайно написать if (flag = false) ... - вы назначаете false здесь, и он все еще компилируется)

0 голосов
/ 04 июля 2019

https://github.com/tim12332000/TimUnityUtility/blob/master/Assets/ScheduleHelper/ScheduleHelper.cs

Используйте это, например, чтобы задержать задание на 3 секунды.

hasTeleportedRecently = true;
ScheduleHelper.Instance.DelayDo(()=> {hasTeleportedRecently = false;},3f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...