Переход Unity3D разработчиков на Unreal Engine 4 - Epic Wiki

# Переход Unity3D разработчиков на Unreal Engine 4

# Contents

# Общее

Это руководство создано для людей, которые пришли с Unity3D и C # и хотят перейти на Unreal Engine 4 и C++. Это руководство предполагает, что вы понимаете, как работает Unreal Editor включая такие вещи, как импорт и экспорт, чертежи [Blueprints], настройки мира, настройки проекта и многое другое. Здесь будут рассмотрены ключевые понятия Unreal Engine 4 и как они соотносятся с Unity3D.
ПРИМЕЧАНИЯ АВТОРА: Тут я складываю все полезные связи, которые я нашел в процессе изучения движка. А потом пользуюсь этой статьей как кратким руководством сходств и отличий.

# Ключевые понятия

# Игровая логика

# Unity

Игровая логика описывается с использованием среды Mono. Игровые скрипты манипулируют игровыми объектами [GameObject]. Игровые объекты могут иметь несколько игровых скриптов или вообще ни одного.

# Unreal Engine 4

Игровая логика описывается с использованием C++ и/или редактора чертежей [Blueprint Editor]. Классы C++ и чертежи управляют актерами [Actors] сцены. Чертежи похожи на префабы [Prefabs] Unity. Чертежи представляют собой родительский класс, интерфейсы и любые компоненты, которые вы добавляете через редактор чертежей, а так же единую логику поведения чертежа. Обычно игру представляют набором функциональных систем написанных на C++, однако поскольку классы можно описывать через систему чертежей, то всю второстепенную функциональность игры можно полностью описать чертежами.

# Начало игры

# Unity

По умолчанию загружается уровень с индексом 0. Будучи однажды загруженными, все скрипты (по регламентированной очередности) вызывают несколько специальных методов класса, такие как Awake, Start, OnEnable, и т.д...

# Unreal Engine 4

Уровень загружаемый по умолчанию можно обозначить (Edit > Project Settings > Maps & Modes). Каждый уровень имеет класс настроек мира [WorldSettings], поля которого можно изменять в редакторе. Используя эти поля создается класс UWorld, который создает объект GameMode в сцене. Объекты GameMode используются для создания объектов PlayerController, менеджеров и других, используемых в игре.

Замечание: (Edit > Project Settings > Maps & Modes) Секция Default Modes позволяет установить класс GameMode по умолчанию, которым будут пользоваться все уровни которым явно не назначено иное.

Стартовая точка игры - конструктор класса GameMode (или его наследника).

# Сцена

Принцип сцены в обоих движках идентичен. Однако Unity3D и UE4 имеют разные направления координатных осей.

# Unity3D

Ось Y направлена вверх.

  • X - влево, вправо
  • Y - вверх, вниз
  • Z - вперед, назад

Формат файла: *.scene

Используются статические методы класса GameObject для операции с объектами на сцене (find, spawn, destroy)

Загрузка сцены: Application.LoadLevel(string name);

# Unreal Engine4

Ось Z направлена вверх.

  • X - вперед, назад
  • Y - влево, вправо
  • Z - вверх, вниз

UE4 дает осям вращение иное наименование (в отличии от координатных): Roll, Pitch и Yaw.

Формат файла: *.umap

Используются методы класса UWorld для операции с объектами на сцене (find, spawn, destroy). Можно получить экземпляр UWorld используя функцию GetWorld() класса PlayerController.

Загрузка сцены: GetWorld()->ServerTravel(string URL);

URL – путь к сцене, который может содержать дополнительные параметры. Например: "/Game/Maps/<map_name>?<key_1>=<value_1>&<key_2>=<value_2>"

Чтение параметров в коде: (GameMode class) GetIntOption(OptionsString, <key_1>, <default_value>);

# Объекты сцены

# Unity

Базовый объект сцены – GameObject.

Объекты GameObject являются контейнерами для других компонентов [Components]. По умолчанию всегда снабжается компонентом Transform. Компоненты добавляются, что бы внести в объект GameObject новую функциональность.

Объекты GameObject поддерживают иерархию (родительский объект -> дочерние объекты).

# Unreal Engine 4

Базовый объект сцены - Actor.

Сам по себе Actor не содержит компонентов USceneComponent. Actor это просто базовый объект, который может быть представлен в сцене. Компоненты добавляются, что бы внести в объект Actor новую функциональность.

Объекты Actor поддерживают иерархию (родительский объект -> дочерние объекты).

Программисты могут наследоваться от UActorComponent для создания своих компонентов.

Пример создания компонента:

TSubobjectPtr<USceneComponent> SceneComponent = PCIP.CreateDefaultSubobject<USceneComponent>(this, TEXT("SceneComp")); RootComponent = SceneComponent;

# События ввода

# Unity

Единый класс обрабатывающий пользовательский ввод

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::Type index, FVector ScreenPosition) { }

# Вывод в консоль (log)

# Unity

Debug.Log("Log text " + (0.1f).ToString()); Debug.LogWarning("Log warning"); Debug.LogError("Log error");

# Unreal Engine 4

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("This is an on screen message!")); UE_LOG(LogTemp, Log, TEXT("Log text %f"), 0.1f); UE_LOG(LogTemp, Warning, TEXT("Log warning")); UE_LOG(LogTemp, Error, TEXT("Log error")); FError::Throwf(TEXT("Log error")); FMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT("Dialog message")));

Подробнее: Wiki Entry on logging

# Главные классы и функции

# Основные типы данных

Unity3D

Unreal Engine4

int

int32, int24, int8

string

FString

Transform

FTransform

Quaternion

FQuat

Rotation

FRotator

Gameobject

Actor

Array

TArray

# Продвинутые типы данных

Unreal Engine4

Описание

TAssetPtr

Указатель на ресурс, который еще не загружен, но может, если потребуется

TAssetSubclassOf

Указатель на подкласс, который еще не загружен, но может, если потребуется. Используется как указатель на чертежи [Blueprints].

# Функции

Тут представлен список наиболее часто используемых функций, которые любой разработчик Unity C# должен знать и использовать. Соответственно справа указаны идентичные функции UE4

Unity3D

Unreal Engine4

Update()

Tick(), TickComponent()

transform

GetActorTranform(), GetFocalLocation()

transform.position

GetActorTranform().GetLocation()

transform.roation

GetActorTranform().GetRotation()

transform.localScale

GetActorTranform().GetScaled3D()

GetComponent()

FindComponentByClass()

Destroy()

Destroy()

Find()

TObjectIterator(), FActorIterator, ActorItr(GetWorld()),ConstructorHelpers::FObjectFinder<your_class> object(name)

MathF

FMath

RayCast

Trace

SphereCast

Sweep

# Компоненты

Unity3D

Unreal Engine4

Transform

USceneComponent

Camera

UCameraComponent

BoxCollider

UBoxComponent

MeshFilter

UStaticMeshComponent

ParticleSystem

UParticleSystemComponent

AudioSource

UAudioComponent

# Статические данные

Unreal Engine 4

Описание

UGameplayStatics

Используется для получения таких вещей как players pawn, game mode, singlton, controller, spawn decal, spawn emitter

# Спавн

Для создания чего-то в режиме реального времени.

# Unity3D

Instantiate()

Эта функция создает копию объекта, как вызов Duplicate в редактора. Клонируя GameObject вы можете обозначить его новое местоположение. Если вы клонируете компонент, то GameObject которому принадлежит компонент так же клонируется.

# Unreal Engine4

UWorld->SpawnActor()

Процесс создания нового экземпляра Actor называется - спавн [spawn]. Спавн объекта Actor производится функцией UWorld::SpawnActor(). Эта функция создает новый экземпляр класса и возвращает указатель на вновьсозданного Actor. UWorld::SpawnActor() может использоваться только для спавна классов, унаследованных от Actor.

# #includes

Стоит отметить, что все включенное директивой #include в файле "Project.h" распространится на все классы проекта. Однако ваш компилятор может подложить вам свинью, поэтому рекомендуется все-таки делать включения индивидуально для каждого класса.

# ParticleDefinitions.h

При попытке добавить систему частиц из C++ вы получите ошибку, если не подключите файл "ParticleDefinitions.h" к вашему "class.h".

.h

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.   #pragma once   #include "GameFramework/Actor.h" #include "ParticleDefinitions.h" #include "ParticleTest.generated.h"   UCLASS() class AParticleTest : public AActor { GENERATED_UCLASS_BODY()   UPROPERTY(VisibleAnywhere, Category = Particle System) TSubobjectPtr<UParticleSystemComponent> ParticleSystem; };

.cpp

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.   #include "MyProject.h" #include "ParticleTest.h"     AParticleTest::AParticleTest(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP) { ParticleSystem = PCIP.CreateDefaultSubobject<UParticleSystemComponent>(this, FName(TEXT("Particle System"))); RootComponent = ParticleSystem;   }

Retrieved from "https://wiki.unrealengine.com/index.php?title=Переход_Unity3D_разработчиков_на_Unreal_Engine_4&oldid=6972"

Category: