플러그인 등록

개발 일지|2024. 11. 30. 22:46

플러그인

  • 특정 목적을 위해 디자인된 코드와 데이터의 집합
  • 플러그인으로 런타임이나 게임플레이, 에디터에 관련된 기능을 추가할 수 있다.
  • 하나 이상의 모듈로 만들어진다.
    • 모듈은 C++코드로 만들어진 별개의 유닛
    • 모듈은 별개의 build.cs 파일을 포함한다.
    • 개별 작업에 대한 고유한 기능을 캡슐화한 형태
    • Uasset(Mesh, Texture)을 포함하지 않는 코드로만 이루어짐
    • 프로젝트 자체도 모듈이 될 수 있다
  • 만드는법 자체도 우선 굉장히 간단한데, edit->plugin에서 Add->Blank(옵션 선택)선택하고 원하는 대로 정보 작성하면 바로 생성된다.

프로젝트에 추가된 모습


Setup Dependencies

  • 여기서 uplugin 파일로 들어가면 플러그인에 대한 여러 정보들을 확인할 수 있다.
  • 해당 파일에서 기능에 필요한 다른 플러그인도 추가할 수 있다.
"Modules": [
	{
		"Name": "MultiplayerSessions",
		"Type": "Runtime",
		"LoadingPhase": "Default"
	}
],
"Plugins": [
	{
		"Name": "OnlineSubsystem",
		"Enabled": true
	},
	{
		"Name": "OnlineSubsystemSteam",
		"Enabled": true
	}
]
  • 그리고 플러그인의 Build.cs 파일에 DependencyModule을 추가해준다.
PublicDependencyModuleNames.AddRange(
	new string[]
	{
		"Core",
		"OnlineSubsystem",
		"OnlineSubsystemSteam",
		// ... add other public dependencies that you statically link with here ...
	}
	);
  • 그리고 빌드하면 끝

Session 관리 로직을 구현할 Parent Class

  • Game Instance
    • 게임 생성시 같이 생성됨
    • 게임이 꺼질때까지 없어지지 않음
    • 레벨 이동시에도 유지되어 항상 같은 Game Instance를 사용 가능
  • Game Instance Subsystem
    • 게임 인스턴스 단위로 유지됨
    • 자동으로 엔진에 의해 생성되며, 엔진이 수명주기를 관리
    • 어느 시점에 초기화되고 종료될지는 엔진의 구조에 따라 결정됨 (별도로 메모리 해제 생각하지 않아도 됨)
    • 게임 인스턴스가 생성된 후 생성되며, 게임 인스턴스가 없어질 때 없어지므로 세션 관련 로직이 들어가기 알맞음

Subsystem 생성

  • 에디터의 Contents browser -> C++ 클래스에 새롭게 하나 추가
  • GameInstanceSubsystem 클래스를 상속받아 만들고, 타겟 모듈을 우리가 추가한 플러그인으로 설정
  • 생성한 후, 헤더와 cpp파일에 Sessioninterface의 5가지 함수를 추가하고 델리게이트 및 콜백함수까지 선언
  • 이후 내부 로직 구현

함수 동작 테스트를 위한 메뉴 구성

  • 플러그인 추가시 메뉴까지 같이 호환되도록 플러그인의 public 폴더에 UserWidget 생성
void UMenuUI::MenuSetup()
{
	AddToViewport();
	SetVisibility(ESlateVisibility::Visible);
	bIsFocusable = true;

	UWorld* World = GetWorld();
	if (World) {
		APlayerController* PlayerController = World->GetFirstPlayerController();
		if (PlayerController) {
			FInputModeUIOnly InputModeData;
			InputModeData.SetWidgetToFocus(TakeWidget());
			InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);
			PlayerController->SetInputMode(InputModeData);
			PlayerController->SetShowMouseCursor(true);
		}
	}
}
  • 생성된 MenuUI 클래스에 기초 로직 세팅
  • 간단하게 마우스 커서 옵션만 설정 후 widget blueprint 추가
  • 테스트용으로 간단하게 Host버튼, Join버튼 추가
  • 메인 레벨의 블루프린트를 열어 BeginPlay노드로 위젯 생성

'개발 일지' 카테고리의 다른 글

플러그인 UI - 2  (0) 2024.12.02
플러그인 UI - 1  (0) 2024.12.01
Join Session  (0) 2024.11.29
OnlineSubsystem Steam 연결 및 Create Session  (0) 2024.11.27
Listen Server와 Dedicated Server  (0) 2024.11.26

댓글()