[UE] Plugin, Slate UI
언리얼 엔진에서 플러그인은 엔진의 기능을 확장하는 모듈식 구성요소이다. 사용자 정의 플러그인을 생성하여 새로운 기능을 추가하거나 기존 기능을 수정할 수 있으므로 개발자가 특정 요구 사항에 맞게 엔진을 조정할 수 있다. 커스텀 플러그인을 만들 때 모듈식 디자인의 모범 사례를 따르고 언리얼 엔진의 프로그래밍 규칙을 준수하는 것이 중요하다.
목차
Plugins | ||
Example | ||
Example.Build.cs ExampleModule.h .cpp ExampleDebuggerCategory.h .cpp 생성 |
||
Slate UI
언리얼 엔진에서 커스텀 플러그인을 만들기
- 언리얼 에디터를 열고 "플러그인" 메뉴로 이동한다.
- "새 플러그인"을 클릭하고 생성할 플러그인 유형을 선택한다.
- 플러그인의 이름과 위치를 선택하고 "플러그인 만들기"를 클릭한다.
- 소스 코드 디렉토리를 포함하여 기본 파일 및 폴더 세트로 플러그인이 생성된다.
- 소스 코드 디렉토리에서 새 C++ 클래스 또는 블루프린트 스크립트를 생성하여 플러그인용 새 모듈을 생성한다.
- 모듈의 소스 코드 또는 Blueprint 스크립트에서 플러그인의 기능을 정의한다.
- 소스 코드 또는 Blueprint 스크립트를 컴파일하여 플러그인을 빌드한다.
- 플러그인이 빌드되면 언리얼 엔진 프로젝트에 추가할 수 있는 별도의 모듈로 패키징 및 배포할 수 있다.
커스텀 플러그인을 만들 때 모듈식 디자인의 모범 사례를 따르고 언리얼 엔진의 프로그래밍 규칙을 준수하는 것이 중요하다.
모듈화
Lib (static Library)
- 프로그래밍의 일부분이 되어 똑같은 메모리 공간을 사용한다.
DLL (Dynamic Link Library)
- 별도의 메모리 공간을 사용한다. Map 단위를 DLL로 만들 수도 있다.
- 해당 경우, 점검 시 해당 맵만 멈춰놓고(=얼려놓고) 점검할 수 있다.
Slate UI
Game | ||
private Module | ← (X) | Project |
public Module | ← (O) |
UMG vs. Slate UI
UMG는 게임에서 뜨는 UI
Slate UI는 Editor에 뜨는 UI
EVerbosity
https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Logging/ELogVerbosity__Type/
프로젝트 & 플러그인
새 프로젝트 생성
새 플러그인 만들기
Plugins > Example
- Binaries: Plugin용 DLL이 컴파일 되어 들어가있다.
- Content: 에셋용. 게임 런타임쪽 들어갈 리소스.
- Resource: 파일을 직접적으로 사용. ex. 이미지, 사운드 파일.
- .uplugin: plugin 엔진 설정.
Plugin 코드
UObject로부터 상속받지 않는 모든 Class는 F를 붙인다. ex. FExampleModule
ExampleBuild.cs
Game | ||
private Module | ← (X) | Project |
public Module | ← (O) |
ExampleBuild.cs
using UnrealBuildTool;
public class Example : ModuleRules
{
public Example(ReadOnlyTargetRules Target) : base(Target) //public은 외부에 공개
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
PublicIncludePaths.Add(ModuleDirectory);
PublicDependencyModuleNames.Add("Core");
PrivateDependencyModuleNames.Add("CoreUObject");
PrivateDependencyModuleNames.Add("Engine");
PrivateDependencyModuleNames.Add("Slate");
PrivateDependencyModuleNames.Add("SlateCore");
PrivateDependencyModuleNames.Add("GameplayDebugger");
}
}
PrivateDependencyModuleNames (List<String>)
- List of private dependency module names. These are modules that our private code depends on but nothing in our public include files depend on.
ExampleModule
ExampleModule.h
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FExampleModule : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;
};
ExampleModule.cpp
#include "ExampleModule.h"
#include "ExampleDubuggerCategory.h"
#include "GameplayDebugger.h"
#define LOCTEXT_NAMESPACE "FExampleModule"
IMPLEMENT_MODULE(FExampleModule, Example)//모듈의 시작점을 알려준다.
void FExampleModule::StartupModule()
{
IGameplayDebugger::FOnGetCategory category;
category.BindStatic(&FExampleDubuggerCategory::MakeInstance);
IGameplayDebugger::Get().RegisterCategory("Example", category, EGameplayDebuggerCategoryState::EnabledInGameAndSimulate, 5); //5번 슬롯 할당
IGameplayDebugger::Get().NotifyCategoriesChanged();
}
void FExampleModule::ShutdownModule()
{
if (IGameplayDebugger::IsAvailable())
IGameplayDebugger::Get().UnregisterCategory("Example");
}
#undef LOCTEXT_NAMESPACE
ExampleDebuggerCategory
새 C++ 클래스 - ExampleDebuggerCategory 생성
ExampleDebuggerCategory.h
#pragma once
#include "CoreMinimal.h"
#include "GameplayDebuggerCategory.h"
class EXAMPLE_API FExampleDubuggerCategory
: public FGameplayDebuggerCategory
{
public:
FExampleDubuggerCategory();
~FExampleDubuggerCategory();
public:
static TSharedRef<FGameplayDebuggerCategory> MakeInstance();
public:
void CollectData(APlayerController* OwnerPC, AActor* DebugActor) override;
};
ExampleDebuggerCategory.cpp
#include "ExampleDubuggerCategory.h"
#include "GameFramework/Character.h"
#include "GameFramework/PlayerController.h"
FExampleDubuggerCategory::FExampleDubuggerCategory() { }
FExampleDubuggerCategory::~FExampleDubuggerCategory() { }
TSharedRef<FGameplayDebuggerCategory> FExampleDubuggerCategory::MakeInstance()
{
return MakeShareable(new FExampleDubuggerCategory());
}
void FExampleDubuggerCategory::CollectData(APlayerController * OwnerPC, AActor * DebugActor)
{
FGameplayDebuggerCategory::CollectData(OwnerPC, DebugActor);
//GLog->Log(OwnerPC->GetPawn()->GetName());
//if (!!DebugActor)
// GLog->Log(DebugActor->GetName());
}
프로젝트 세팅 - 게임플레이 디버거 - Add Ons - 카테고리
- 0번에 Example이 들어왔다.
- 아래의 Override Slot Idx를 체크하면 Slot Idx를 바꿀 수 있다.
실행화면
'⭐ Unreal Engine > UE Plugin - Basic' 카테고리의 다른 글
[UE] Plugin (Save StaticMesh & RenderData, LOD) (0) | 2023.04.12 |
---|---|
[UE] Plugin (StaticMesh Detail) (0) | 2023.04.07 |
[UE] StaticMesh (0) | 2023.04.06 |
[UE] Console Command (0) | 2023.04.05 |
[UE] Console, DrawDebugLine (0) | 2023.04.04 |
댓글
이 글 공유하기
다른 글
-
[UE] Plugin (StaticMesh Detail)
[UE] Plugin (StaticMesh Detail)
2023.04.07 -
[UE] StaticMesh
[UE] StaticMesh
2023.04.06 -
[UE] Console Command
[UE] Console Command
2023.04.05 -
[UE] Console, DrawDebugLine
[UE] Console, DrawDebugLine
2023.04.04