Unreal Engine 4
https://uengine.ru/forum/

[Новичок] Tick, Обработка событий и нажатий
https://uengine.ru/forum/viewtopic.php?f=19&t=4386
Страница 1 из 1

Автор:  xai [ 21 янв 2017, 17:07 ]
Заголовок сообщения:  [Новичок] Tick, Обработка событий и нажатий

Здравствуйте, на разработку игр перешел недавно (раньше на C# софт писал). Выбрал UE4 и пишу на С++. Документацию читал но что то она не зашла. Помогите, есть 3 вопроса.

1. Tick зависит от производительности ПК.
Я понял что эта функция вызывается при каждом кадре и получается что если туда написать код, который например немного поворачивает объект то на разных ПК он будет крутится по разному а иногда даже на одном и том же (когда просадки fps случаются). Теперь внимание, как ркешить эту проблему? Может есть какая то привязка к времени или еще что то.
Код:
FVector NewLocation = GetActorLocation();
NewLocation.Z = NewLocation.Z + 0.2f;
SetActorLocation(NewLocation);


2. Обработчик событий.
Так и не смог найти штуку которая вызывала бы функцию когда например объекты касаются. Или это нужно делать методом: В Tick вставить функцию if которая бы проверяла когда координаты близко? Это как то бредово когда много объектов. В общем вопрос: Как активировать определенную функцию при каком либо событии либо при касании объектов.

3. Обработчик нажатий клавиш
Стандартное управление персонажем в движке понятно. А как реализовать что бы при нажатии определенной клавиши вызывался определенный код, который например не просто управляет персонажем а например меняет мир. Знаю что на Unity есть такая штука которая вставляется в аналог Tick
Код:
if (Input.GetMouseButton(0)) { [i][u]Выполняемый код при нажатии[/u][/i] }

Как это реализовать на Нереальном Двигателе 4?

Автор:  Flakky [ 21 янв 2017, 21:29 ]
Заголовок сообщения: 

1)
У тик функции есть параметр DeltaTime. Это длина кадра в секундах. Соответственно, что бы выровнять действие вне зависимости от фпс, нужно умножить что-то на этот Delta Time. Например если хотите двигать сферу на метр в секунду, то будет следующее : NewLocation.Z = NewLocation.Z + 100.0f * DeltaTime.

2)
https://www.youtube.com/watch?v=O47Zw94 ... eP08DyWtHh
Там он про это говорит.

3)
Обработчики событий посмотрите в стандартной заготовке. Оно делается ровно так же, как и на персонаже (например прыжок). Единственное, там нужно ещё в ProjectSettings > Inputs настроить идентификаторы.

Автор:  Prytaleks [ 22 янв 2017, 19:55 ]
Заголовок сообщения: 

xai писал(а):
Я понял что эта функция вызывается при каждом кадре и получается что если туда написать код, который например немного поворачивает объект то на разных ПК он будет крутится по разному а иногда даже на одном и том же (когда просадки fps случаются). Теперь внимание, как ркешить эту проблему? Может есть какая то привязка к времени или еще что то.


реально помогает формула процентного соотношения, вот я для себя выбрал цифру относительно 60 фпс, потом формула все выравнивает,
1 / DeltaSecond = Fps, потом по формуле вставить свою цифру, которой следует подстроится под фпс(на скрине у меня это переменная типа флоат - SpeedRejim),

Изображение

p.s. если для расчетов использовать таймлайн, будет всегда ровно - при любом фпс. А вот тик или дэлей это да, требуется вычисление фпс и формула процентного соотношения.

Автор:  Vladimir488 [ 23 янв 2017, 11:27 ]
Заголовок сообщения: 

Я так понял что на моём компе с такими формулами в твои игры не поиграешь. 8)

Автор:  Prytaleks [ 23 янв 2017, 14:58 ]
Заголовок сообщения:  Re:

Vladimir488 писал(а):
Я так понял что на моём компе с такими формулами в твои игры не поиграешь. 8)


фиговый у тебя комп, это код из игры которая в данное время летит на двухядерной мобиле.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/