Пятница, 22 Ноября 2024, 22:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Аналог Start но после Update
ArtemSДата: Вторник, 14 Ноября 2017, 18:31 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Нужен метод на подобии Start(), только чтобы выполнялся в конце первого цикла программы, ну либо хотя бы после Update() и лишь один раз ?

https://docs.unity3d.com/ru/530/Manual/ExecutionOrder.html

тут нечего подходящего не обнаружил..либо в глазки долблюсь нещадно)


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Вторник, 14 Ноября 2017, 18:32
pixeyeДата: Вторник, 14 Ноября 2017, 18:45 | Сообщение # 2
Red Winter Software
Сейчас нет на сайте
Цитата ArtemS ()
тут нечего подходящего не обнаружил..либо в глазки долблюсь нещадно)



Ты аккуратнее с долбежом. Вредно это.

Непредставляю зачем тебе такое вообще нужно но почему просто не сделать корутину на 1-2 кадра?


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

alexsilentДата: Вторник, 14 Ноября 2017, 19:01 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Все очень просто, придется самому писать.
Я обычно сижу на яваскрипте, потому плохо Сишарплю (а точнее я вообще его не знаю), но думаю будет понятно

Код
bool onceStart; // я вообще правильно написал bool или надо Boolean или boolean?

void Update() {
  //...
  MyStart();
}

void MyStart() { // функция которая работает один раз, что может быть проще
if (onceStart) {return;}
onceStart = true;
//...твой код
}


Сообщение отредактировал alexsilent - Вторник, 14 Ноября 2017, 19:14
drcrackДата: Вторник, 14 Ноября 2017, 19:57 | Сообщение # 4
старожил
Сейчас нет на сайте
Поскольку Start может быть корутиной, самый простой способ очень короткий:

Код
IEnumerator Start() {
    yield return new WaitForEndOfFrame();
    Debug.Log("Once After Update");
}

Проблема в том, что это выполнится уже после рендеринга, так что если ты будешь менять например положение или вращение, в кадр это уже не попадет. Если это критично, делай как в посте выше, потому что в Unity по странным причинам нельзя запустить корутину в том же кадре после Update и до рендеринга. Либо после рендеринга (как в примере), либо только в следующем кадре (любой другой yield включая кастомные)

Кстати, если объект существует с самого начала, можно сделать просто:

Код
void OnceAfterUpdate() {
    Debug.Log("OnceAfterUpdate");
}

void LateUpdate() {
    if (Time.frameCount == 1) OnceAfterUpdate();
}


Сообщение отредактировал drcrack - Вторник, 14 Ноября 2017, 20:39
ArtemSДата: Среда, 15 Ноября 2017, 17:25 | Сообщение # 5
почетный гость
Сейчас нет на сайте
pixeye, drcrack, alexsilent, да понятное дело что так можно, но есть же LateUpdate , почему не может быть Exit какой-нибудь)

хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Среда, 15 Ноября 2017, 17:34
drcrackДата: Среда, 15 Ноября 2017, 21:26 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
pixeye, drcrack, alexsilent, да понятное дело что так можно, но есть же LateUpdate , почему не может быть Exit какой-нибудь)

потому что это никому не нужно, я на 99% уверен что и тебе это не нужно
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг