Unreal TIL 10일차 - 언리얼 플러그인

yys·2026년 3월 10일

TIL

목록 보기
9/80

개인적으로 언리얼 인벤토리 시스템 강의를 들었을 때, 코드를 Source 내에서 작성하는 것이 아닌 Plugin을 제작하는 방식으로 진행했다.

아직은 간단하게 Plugin에 대해서 알아보고 생성하는 것만 남겨보려고 한다.

플러그인


플러그인(Plugin)은 엔진의 핵심 코드를 직접 수정하지 않고도, 엔진이나 에디터의 기능을 확장하고 추가할 수 있도록 묶어 놓은 데이터의 집합이다.

Edit -> Plugins를 보면 다양한 플러그인의 목록들을 볼 수 있다.

플러그인을 제작하는 이유는 다음과 같다.

  • 모듈화 및 재사용성 : 한 프로젝트 내에서 인벤토리 시스템을 작성하면 이 시스템은 해당 프로젝트에만 국한된다. 그러므로 인벤토리 시스템을 모듈화를 시키면 다양한 프로젝트에 제약 받지 않고 사용할 수 있다.

  • 컴파일 타임 최적화 : 플러그인은 독립 모듈로 빌드되기 때문에 일반적으로 프로젝트를 빌드할 때 다시 빌드할 필요가 없다.

  • 배포 및 공유 : 플러그인은 필요하면 갖다 붙이는 방식으로 활용할 수 있기 때문에 배포 및 공유가 활발하다.

플러그인 제작


언리얼에서 제공하는 플러그인이나 Fab에서 다운받은 플러그인을 사용하지 않고 나만의 플러그인을 만드려면 다음과 같이 하면 된다.

Edit -> Plugins ->(왼쪽 상단) Add

Blank -> Plugin Name 작성(Author, Description은 선택) -> Create Plugin

  • Show Content Directory는 Content Drawer에 해당 플러그인 폴더를 보이게 하는 옵션

다음과 같이 나만의 Plugin Content 폴더와 추가된 소스 코드를 확인할 수 있다.

추가된 소스 코드의 내용은 다음과 같지만, 상세하게 다루는 부분은 없기 때문에 함수 정의만 작성해보았다.

// MyPlugin.h
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FMyPluginModule : public IModuleInterface
{
public:

	virtual void StartupModule() override;
	virtual void ShutdownModule() override;
};

// MyPlugin.cpp
#include "MyPlugin.h"

#define LOCTEXT_NAMESPACE "FMyPluginModule"

void FMyPluginModule::StartupModule()
{
	// 해당 모듈이 메모리에 로드될 때 자동으로 호출
}

void FMyPluginModule::ShutdownModule()
{
	// 모듈이 셧다운(종료)되기 이전에 자동으로 호출
}

#undef LOCTEXT_NAMESPACE
	
IMPLEMENT_MODULE(FMyPluginModule, MyPlugin)

추가로 프로젝트 내에서 모듈을 추가하려면 프로젝트명.Build.cs 파일에 모듈명을 작성하듯, 플러그인도 플러그인명.Build.cs에 모듈명을 작성해야 한다. 예시로 플러그인에서 EnhancedInput을 사용한다면 아래 내용을 추가해야 한다.

// MyPlugin.Build.cs
		/* ... */
        // Private/Public 상황에 맞게 모듈 추가. 아래에서는 Private에 작성
		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Core",
			}
			);
			
		
		PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				"CoreUObject",
				"Engine",
				"Slate",
				"SlateCore",
				"EnhancedInput", // 추가된 부분
			}
			);

플러그인 활용


플러그인 폴더에서 간단하게 로그만 출력해보는 연습을 해보려고 한다.
추가한 폴더에서 PlayerController를 생성하고 다음과 같이 단순 로그 출력 코드를 작성했다.

// MyPlayerController.h
#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "MyPlayerController.generated.h"

UCLASS()
class TESTPROJECT_API AMyPlayerController : public APlayerController
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable)
	void PrintLog();
};

// MyPlayerController.cpp
#include "MyPlayerController.h"

void AMyPlayerController::PrintLog()
{
	if (GEngine)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Event Call"));
	}
}

이후 해당 클래스를 상속하는 블루프린트 클래스를 만들고 이벤트 설정을 한다.

해당 블루프린트 클래스 사용하는 GameMode를 세팅해주면 E를 누를 때마다 로그가 뜬다.

profile
게임 개발 지망생

0개의 댓글