Аналог 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% уверен что и тебе это не нужно
|
|
| |