Введение в разработку плагинов в Unreal Engine
Добро пожаловать в увлекательный мир разработки плагинов в Unreal Engine! Если вы здесь, вероятно, вам не терпится раскрыть весь потенциал этого мощного игрового движка, создавая собственные уникальные плагины. В этой статье мы отправимся в путешествие по созданию плагина с нуля, используя C++ как нашу верную волшебную палочку.
Зачем нужны плагины?
Плагины — это магические заклинания, которые могут усилить или полностью изменить поведение Unreal Engine. Они позволяют добавлять новые функции, инструменты и даже целые системы без необходимости изменять основной код движка. Это делает их невероятно универсальными и необходимыми для любого серьёзного разработчика.
Настройка среды
Прежде чем погрузиться в волшебство, давайте убедимся, что наша среда настроена правильно.
Выбор подходящего типа проекта
При создании нового проекта в Unreal Engine убедитесь, что вы выбрали опцию «C++». Это важно, поскольку позволяет создавать и работать с плагинами на C++, что было бы невозможно при выборе опции только Blueprint.
Visual Studio и настройка редактора
После создания проекта Unreal Engine автоматически откроет Visual Studio и редактор Unreal Engine. Здесь вы увидите структуру вашего проекта, включая карту по умолчанию.
Создание первого плагина
Шаг 1: Добавление нового плагина
В редакторе Unreal Engine перейдите в «Настройки» > «Плагины» и нажмите кнопку «Добавить новый». Вы увидите различные шаблоны плагинов; для этого примера мы будем использовать шаблон «Кнопка панели инструментов редактора».
- Назовите свой плагин (например, «NightModePlugin»).
- Заполните необходимые данные и нажмите «Создать».
Шаг 2: Написание кода плагина
Теперь давайте напишем код на C++, чтобы наш плагин работал. Наша цель — создать кнопку, которая при нажатии превращает текущий уровень в ночную сцену.
Структура кода плагина:
Вот базовая структура того, как может выглядеть ваш код плагина:
// NightModePlugin.h
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
#include "NightModePlugin.generated.h"
class NIGHTMODEPLUGIN_API FNightModePlugin : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;
};
// NightModePlugin.cpp
#include "NightModePlugin.h"
#include "LevelEditor.h"
#include "Editor.h"
#include "DirectionalLight.h"
#include "PostProcessVolume.h"
void FNightModePlugin::StartupModule()
{
// Create the toolbar button
TSharedPtr<FExtender> Extender = MakeShareable(new FExtender);
Extender->AddToolBarExtension(
"NightMode",
EExtensionHook::After,
FToolBarExtensionDelegate::CreateRaw(this, &FNightModePlugin::AddToolbarButton)
);
// Register the button click event
FLevelEditorModule& LevelEditorModule = FModuleManager::GetModuleChecked<FLevelEditorModule>("LevelEditor");
LevelEditorModule.GetToolBarExtender()->AddExtender(Extender);
}
void FNightModePlugin::ShutdownModule()
{
// Clean up
}
void FNightModePlugin::AddToolbarButton(FToolBarBuilder& Builder)
{
Builder.AddToolBarButton(
FUIAction(
FExecuteAction::CreateRaw(this, &FNightModePlugin::OnNightModeButtonClicked),
FCanExecuteAction::CreateRaw(this, &FNightModePlugin::CanExecuteNightModeButton)
),
NAME_None,
FText::FromString("Night Mode"),
FText::FromString("Toggle Night Mode"),
FSlateIcon(FAppStyle::GetAppStyle()->GetIcon("LevelEditor.ViewOptions")),
EUserInterfaceActionType::Button
);
}
void FNightModePlugin::OnNightModeButtonClicked()
{
// Get the current world
UWorld* World = GEditor->GetEditorWorldContext()->World();
if (World)
{
// Find the directional light and adjust its intensity
for (AActor* Actor : World->GetActors())
{
if (ADirectionalLight* Light = Cast<ADirectionalLight>(Actor))
{
Light->SetIntensity(0.1f);
break;
}
}
// Adjust post-process volume settings
for (AActor* Actor : World->GetActors())
{
if (APostProcessVolume* Volume = Cast<APostProcessVolume>(Actor))
{
Volume->SetAutoExposureMinBrightness(0.1f);
Volume->SetAutoExposureMaxBrightness(1.0f);
break;
}
else
{
// Add an unbound post-process volume if none exists
APostProcessVolume* NewVolume = World->SpawnActor<APostProcessVolume>(APostProcessVolume::StaticClass());
NewVolume->SetAutoExposureMinBrightness(0.1f);
NewVolume->SetAutoExposureMaxBrightness(1.0f);
}
}
}
}
bool FNightModePlugin::CanExecuteNightModeButton()
{
return true; // Always executable in this example
}
Шаг 3: Упаковка плагина
Когда вы написали и протестировали свой плагин, пришло время упаковать его, чтобы вы могли использовать его в других проектах.
- В редакторе Unreal Engine перейдите к «Настройки» > «Плагины», найдите свой плагин.
- Нажмите на три точки рядом с вашим плагином и выберите «Упаковка».
- Выберите каталог для сохранения упакованного плагина.
Вот простая диаграмма, иллюстрирующая процесс упаковки:
Использование плагина в других проектах
Чтобы использовать упакованный плагин в другом проекте, выполните следующие действия:
- Скопируйте папку упакованного плагина в каталог «Плагины» нового проекта.
- Откройте файл
.uplugin
и убедитесь, что «EnabledByDefault» установлено в значениеtrue
.
Вот как вы можете включить плагин в свой новый проект: