Ключові концепції програмування на C++ Unreal Engine 4 і порівняння з Unity

У цій статті я коротко опишу основні концепції розробки за допомогою Unreal Engine 4 і порівняю її з розробкою Unity. Це допоможе вам швидко зрозуміти, як працює Unreal Engine 4, особливо якщо ви програміст на Unity. Ця стаття ґрунтується на посібнику UE4 для розробників Unity та містить додаткову інформацію

Автор: Сергій Тарабан

:ad:

Ключові поняття

Ігрова логіка

Єдність

Логіка гри полягає в написанні в середовищі Mono. Скрипти маніпулюють об’єктами. Об’єкт може мати багато скриптів або не мати жодного. Кожен сценарій рівноцінний.

Мінімальний додаток не має скриптів або об’єктів (порожня сцена). Програміст повинен створювати об’єкти зі скриптами, які реалізують необхідну логіку гри

Unreal Engine 4

Ігрова логіка написана за допомогою C++ та/або Blueprint Editor. Клас C++ і проект маніпулюють об’єктами. Об’єкт може мати лише один клас і схему, пов’язану з цим класом.

Додаток Minimal має жорстку архітектуру, яка складається з кількох основних класів, написаних на C++, які реалізують багаторівневу ігрову логіку FPS. Програміст у звичайному випадку повинен походити від цього класу для реалізації необхідної логіки гри.

Початок гри

Єдність

За замовчуванням завантажується рівень з індексом 0. Після цього викликається функція Awake сценарію, який об’єкт був створений першим, або якщо цей сценарій має найвищий пріоритет (Порядок виконання сценарію).

Unreal Engine 4

Завантажується рівень, установлений за замовчуванням (Редагувати > Параметри проекту > Карти та режими). Кожен рівень має налаштування класу WorldSettings. за допомогою цього класу створюється клас UWorld. UWorld створює об’єкт класу GameMode у сцені. Об’єкт GameMode створює об’єкт PlayerController та інший об’єкт.

Точка входу в програму є конструктором класу, успадкованого від GameMode.

Сцена

Концепція Scene в обох двигунах однакова. Unity3D і UE4 мають різні визначення осей.

Unity

Вісь Y вгору.

  • X - ліворуч, праворуч
  • Y - вгору, вниз
  • Z - вперед, назад
Формат файлу: *.scene

Використовуйте статичні методи GameObject для операцій з об’єктами сцени (знайти, створити, знищити)

Завантаження рівня: Application.LoadLevel(ім’я рядка);

Unreal Engine4

Вісь Z вгору.

  • X - вперед, назад
  • Y - ліворуч, праворуч
  • Z - вгору, вниз
Формат файлу: *.umap

Використовуйте метод класу UWorld для операцій з об’єктами сцени (знайти, створити, знищити). Ви можете отримати UWorld за допомогою методу GetWorld() класу PlayerController.

Завантаження рівня: GetWorld()->ServerTravel(string URL);

URL - шлях до рівня. Може включати додаткові параметри. приклад:

/Game/Maps/<назва_карти>?<key_1>=<value_1>&<key_2>=<value_2>

Читання параметрів у коді (клас GameMode) GetIntOption(OptionsString, <key_1>, <default_value>);

Об'єкти сцени

Єдність

Базовий об’єкт сцени - GameObject.GameObjects є контейнерами для всіх інших компонентів. За замовчуванням має компонент Transform. Потім додаються компоненти, щоб надати GameObject функціональність. GameObject не може мати компоненти одного типу (крім скриптів). Компоненти не підтримують зв’язок «батько-нащадок».

Ви можете об’єднати кілька ігрових об’єктів у групу та зв’язати з кореневим ігровим об’єктом (відношення «батько-дочірній»).

Unreal Engine 4

Об’єкт базової сцени – Актор.

Актор — це базовий об’єкт, який можна розмістити або створити у світі. Актор сам по собі навіть не містить компонента Transform. Актор — це просто базовий об’єкт, який може бути присутнім на рівні. Компоненти — це незалежні об’єкти. Це як GameObject в Unity. Один актор може мати багато компонентів одного типу. Більшість компонентів підтримують зв’язок «батько-нащадок» (але не всі).

Програміст може успадковувати компоненти за замовчуванням і створювати власні.Приклад створення компонентів:

TSubobjectPtr SceneComponent = PCIP.CreateDefaultSubobject(це, TEXT("SceneComp"));
RootComponent = SceneComponent;

Події введення

Єдність Введення класу
Input.GetAxis("MoveForward");
Input.GetTouch(0);
Unreal Engine 4 Компонент UInputComponent класу Actor
InputComponent->BindAxis("MoveForward", this, &AFirstPersonBaseCodeCharacter::MoveForward);
InputComponent->BindTouch(EInputEvent::IE_Pressed, this, &AStrategyPlayerController::OnTapPressedMy);
...
void AStrategyPlayerController::OnTapPressedMy(ETouchIndex::Індекс типу, FVector ScreenPosition)
{
}

Друкувати на консолі (журнал)

Єдність
Debug.Log("Текст журналу " + (0.1f).ToString());
Debug.LogWarning("Попередження журналу");
Debug.LogError("Помилка журналу");
Unreal Engine 4
UE_LOG(LogTemp, Log, TEXT("Текст журналу %f"), 0.1f);
UE_LOG(LogTemp, Попередження, TEXT("Попередження журналу"));
UE_LOG(LogTemp, Error, TEXT("Помилка журналу"));
FError::Throwf(TEXT("Помилка журналу"));
FMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT("Діалогове повідомлення")));

Основні класи та функції

Базові типи даних

Unity3D Unreal Engine 4
int int32, int24, int8
рядок FString
Перетворення FTransform
Кватерніон FQuat
Обертання FRotator
Ігровий об'єкт Актор
Масив TArray

Функції та змінні-члени

Найбільш популярне використання функції та змінних
Unity3D Unreal Engine4
Оновити() Tick()
перетворення GetActorTranform(), GetFocalLocation()
transform.position GetActorTranform().GetLocation()
transform.roation GetActorTranform().GetRotation()
transform.localScale GetActorTranform().GetScaled3D()
Destroy() Destroy()
Знайти() FActorIterator ActorItr(GetWorld()),ConstructorHelpers::FObjectFinder object(name)
MathF FM
RayCast Трасування
SphereCast Вичистити

Компоненти

Unity3D Unreal Engine4
Перетворення USceneComponent
Камера UCameraComponent
BoxCollider UBoxComponent
MeshFilter UStaticMeshComponent
ParticleSystem UParticleSystemComponent
Джерело звуку UAudioComponent
 

Схожі посилання

Автор: Сергій Тарабан