Ключові концепції програмування на 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 - вперед, назад
Використовуйте статичні методи GameObject для операцій з об’єктами сцени (знайти, створити, знищити)
Завантаження рівня: Application.LoadLevel(ім’я рядка);
Unreal Engine4
Вісь Z вгору.
- X - вперед, назад
- Y - ліворуч, праворуч
- Z - вгору, вниз
Використовуйте метод класу 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 |
| MathF | FM |
| RayCast | Трасування |
| SphereCast | Вичистити |
Компоненти
| Unity3D | Unreal Engine4 |
|---|---|
| Перетворення | USceneComponent |
| Камера | UCameraComponent |
| BoxCollider | UBoxComponent |
| MeshFilter | UStaticMeshComponent |
| ParticleSystem | UParticleSystemComponent |
| Джерело звуку | UAudioComponent |
Схожі посилання
- Огляд Unreal Engine 4. Особливості, мінуси та плюси
- Unity Fog of War. Частина 3. Статичний і динамічний туман війни
- Посібник із впровадження системи Unity DLC
- Відеоінструкція щодо спеціальної системи частинок Unity. Виготовлення ялинки та кривуль
- Посібник Unity fog of war. Частина 1 (відеоурок)
- Project Anarchy проти Unity 3D. Порівняння двох сучасних ігрових движків
- Підтримка кватерніонів у механізмі irrlicht
Автор: Сергій Тарабан