Как Unreal Engine 4 опрашивает / обрабатывает ввод, с точки зрения синхронизации ввода? - PullRequest
0 голосов
/ 28 апреля 2020

Точность более 0,0166 ... секунды требуется для определенного жанра игры, включая ритм-игру. В этом случае обработка ввода на основе фреймов может быть недостаточной для игроков.

Я немного знаком с Unity, и я знаю, что единство обрабатывало ввод для каждого фрейма (вызов обновления) до самой последней версии. Это означает, что входные данные от игрока опрашиваются вместе со скоростью отображения * refre sh, которая обычно составляет 60 кадров в секунду.

Теперь я новичок в UE4 и хочу знать, как он обрабатывает ввод от игрока , Я вижу тик или тиккомпонент, который, кажется, ведет себя подобно обновлению в единстве. (В документе UE4 говорится: «Функция вызывает каждый кадр в этом компоненте ActorComponent). UE4 также обрабатывает ввод для каждого кадра или метка времени доступна для ввода, даже если рендеринг кадра происходит немного позже, чем фактическая синхронизация ввода?

Сценарий: ввод произошел конкретно в 4,052 секунды, а любой вызов на основе кадра произошел в 4,057 секунды.

В этом случае UE4 воспринимает ввод как произошедший в 4,052 или 4,057?

1 Ответ

0 голосов
/ 28 апреля 2020

Это основанный на кадре, не отмеченный меткой времени. Вы можете проверить это сами. Создайте новый класс C ++> Character. В Visual Studio в этом классе найдите Tick () и измените его следующим образом:

void NameOfClass::Tick(float DeltaTime)
    Super::Tick(DeltaTime);
    if (GetWorld() != nullptr)
    {
        UE_LOG(LogTemp, Warning, TEXT("DeltaTime of Frame: %f"), GetWorld()->TimeSeconds)// Returns time in seconds since world was brought up for play, IS stopped when game pauses, IS dilated/clamped
        UE_LOG(LogTemp, Warning, TEXT("DeltaTime of Frame FDateTime ms: %f"), FDateTime::Now().GetMillisecond())// Gets the local date and time on this computer.
    }

Затем найдите одну из функций ввода, например Jump (), и измените ее следующим образом:

void NameOfClass::Jump()
{
    Super::Jump();
    if (GetWorld() != nullptr)
    {
        UE_LOG(LogTemp, Warning, TEXT("DeltaTime of Jump: %f"), GetWorld()->TimeSeconds)// Returns time in seconds since world was brought up for play, IS stopped when game pauses, IS dilated/clamped
        UE_LOG(LogTemp, Warning, TEXT("DeltaTime of Jump FDateTime ms: %f"), FDateTime::Now().GetMillisecond())// Gets the local date and time on this computer.
    }
}

Не забывайте #include для UWorld в верхней части. cpp

#include "Runtime/Engine/Classes/Engine/World.h"

COMPILE. В редакторе UE4Editor перетащите класс на свой уровень, нажмите play, и вы увидите, что происходит DeltaTime каждого кадра. Если вы нажмете пробел (по умолчанию вызывается Jump ()) и сразу ES C, чтобы остановить игру, вы можете сравнить 2 DeltaTimes. Идентичные! Я надеюсь, что это отвечает на ваш вопрос.

...