Loading the catalog…
Loading the catalog…
1. Unreal Engine 멀티플레이 기초 - 프로젝트 설정과 채팅 UI 구현 Unreal Engine 멀티플레이를 본격적으로 학습하기 전에 프로젝트의 기본 구조를 구성하고, 이후 네트워크 채팅으로 확장할 수 있는 간단한 채팅 입력 시스템을 구현했다. 이번 단계에서는 실제 서버와 클라이언트가 메시지를 주고받지는 않는다. 우선 GameMode, PlayerController, UserWidget이 어떻게 연결되는지 , 그리고 UI에서 입력한 값이 PlayerController까지 어떻게 전달되는지를 이해하는 것이 핵심이다. 강의 역시 멀티플레이 프로젝트에 필요한 기본 설정과 이후 심화 개념을 위한 선수 지식 학습을 목표로 한다. 프로젝트 기본 설정 실습은 Unreal Engine 5.5.4를 기준으로 진행한다. 먼저 채팅 UI 테스트에 필요한 Chatting 레벨을 생성했다. 별도의 게임 월드가 필요한 단계가 아니기 때문에 Empty Level을 사용하고, 해당 레벨을 Editor Startup Map과 Game Default Map으로 설정했다. 게임의 기본 Framework를 구성하기 위해 다음 두 클래스를 생성했다. CXGameModeBase CXPlayerController 각각 GameModeBase , PlayerController 를 상속하며, C++ 클래스를 기반으로 Blueprint 클래스인 BP_GameModeBase , BP_PlayerController 도 만들어 연결했다. 구조를 단순화하면 다음과 같다. Chatting Level ↓ BP_GameModeBase ↓ BP_PlayerController 이 과정에서 Unreal의 기본적인 Level → GameMode → PlayerController 관계를 다시 확인할 수 있었다. 채팅 입력 Widget 만들기 채팅 입력창은 UUserWidget 을 상속한 UCXChatInput 클래스로 구현했다. C++에서는 EditableTextBox를 다음과 같이 선언한다. UPROPERTY(meta = (BindWidget)) TObjectPtr<UEditableTextBox> EditableTextBox_ChatInput; BindWidget 을 사용하면 C++에서 선언한 변수와 Widget Blueprint 내부의 UI 요소를 연결할 수 있다. 이후 WBP_ChatInput 을 생성하고 EditableTextBox를 배치했다. 이 부분을 통해 C++과 Blueprint의 역할을 다음과 같이 나눌 수 있었다. C++ → Widget의 기능 구현 Blueprint → 실제 UI 구성 및 배치 PlayerController에서 Widget 생성 채팅창은 PlayerController가 생성하도록 구성했다. UPROPERTY(EditDefaultsOnly) TSubclassOf<UCXChatInput> ChatInputWidgetClass; UPROPERTY() TObjectPtr<UCXChatInput> ChatInputWidgetInstance; TSubclassOf 에는 생성할 Widget 클래스를 지정하고, TObjectPtr 에는 실제 생성된 Widget 인스턴스를 저장한다. BeginPlay() 에서 CreateWidget() 으로 Widget을 생성한 뒤 AddToViewport() 를 호출한다. ChatInputWidgetInstance = CreateWidget<UCXChatInput>(this, ChatInputWidgetClass); ChatInputWidgetInstance->AddToViewport(); 그리고 채팅 UI에 입력할 수 있도록 Input Mode 역시 UI 전용으로 변경한다. 전체 흐름은 다음과 같다. PlayerController BeginPlay ↓ UI Input Mode 설정 ↓ 채팅 Widget 생성 ↓ AddToViewport ↓ 채팅 입력 가능 입력 이벤트 처리 EditableTextBox에 입력된 값을 처리하기 위해 OnTextCommitted Delegate를 사용했다. Widget이 생성될 때 NativeConstruct() 에서 Delegate를 연결한다. EditableTextBox_ChatInput->OnTextCommitted.AddDynamic( this, &ThisClass::OnChatInputTextCommitted ); Widget이 제거될 때는 NativeDestruct() 에서 Delegate를 해제한다. NativeConstruct ↓ Delegate 등록 ↓ 사용자 입력 ↓ OnTextCommitted ↓ NativeDestruct ↓ Delegate 해제 특히 Widget의 생명주기에 맞춰 이벤트를 등록하고 해제하는 구조를 확인할 수 있었다. Enter 입력을 PlayerController로 전달 사용자가 Enter를 입력했는지는 다음 조건으로 확인한다. if (CommitMethod == ETextCommit::OnEnter) Enter가 입력되면 GetOwningPlayer() 를 통해 현재 Widget을 소유한 PlayerController를 가져온다. 이후 우리가 만든 ACXPlayerController 로 Cast한 뒤 입력된 문자열을 전달한다. OwningCXPlayerController ->SetChatMessageString(Text.ToString()); 마지막으로 입력이 완료된 EditableTextBox의 내용을 초기화한다. 전체 데이터 흐름을 정리하면 다음과 같다. EditableTextBox ↓ Enter 입력 ↓ OnTextCommitted ↓ UCXChatInput ↓ GetOwningPlayer ↓ ACXPlayerController ↓ SetChatMessageString() 입력한 채팅 출력 PlayerController에서는 전달받은 값을 FString 으로 저장한다. FString ChatMessageString; 그리고 PrintChatMessageString() 에서 UKismetSystemLibrary::PrintString() 을 호출해 화면에 출력했다. 최종적인 흐름은 다음과 같다. 사용자 입력 ↓ EditableTextBox ↓ UCXChatInput ↓ ACXPlayerController ↓ ChatMessageString ↓ PrintString 이번 챕터에서 정리한 개념 이번 구현을 통해 TSubclassOf , TObjectPtr , BindWidget , CreateWidget , AddToViewport , NativeConstruct , NativeDestruct , Dynamic Delegate, GetOwningPlayer , Cast 등의 사용 흐름을 확인할 수 있었다. 특히 중요한 부분은 UI가 모든 로직을 직접 처리하는 것이 아니라 PlayerController로 데이터를 전달하도록 구성했다는 점 이다. UI ↓ PlayerController ↓ 게임 로직 현재 단계에서는 입력한 메시지를 자신의 화면에 출력할 뿐 실제 네트워크 통신은 발생하지 않는다. 다음 단계에서는 이 구조에 RPC가 추가되면서 실제 멀티플레이 채팅으로 확장된다. 실제로 강의 다음 챕터 역시 Remote Procedure Call 기초와 멀티플레이 채팅 구현 으로 이어진다.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
Unreal Engine 멀티플레이 기초. 1. Unreal Engine 멀티플레이 기초 - 프로젝트 설정과 채팅 UI 구현 Unreal Engine 멀티플레이를 본격적으로 학습하기 전에 프로젝트의 기본 구조를 구성하고, 이후 네트워크 채팅으로 확장할 수 있는 간단한 채팅 입력 시스템을 구현했다. 이번 단계에서는 실제 서버와 클라이언트가 메시지를 주고받지는 않는다. 우선 GameMode, PlayerController, UserWidget이 어떻게 연결되는지 , 그리고 UI에서 입력한 값이 PlayerController까지 어떻게 전달되는지를 이해하는 것이 핵심이다. 강의 역시 멀티플레이 프로젝트에 필요한 기본 설정과 이후 심화 개념을 위한 선수 지식 학습을 목표로 한다. 프로젝트 기본 설정 실습은…
Open source