본문으로 건너뛰기

Unreal Engine 연동

Unreal Engine 연동

텍스트 중심 가이드입니다 · 예상 소요 10분

중급프레임워크 연동10분읽기 약 2분업데이트 2026-04-14

Unreal Engine에서 ConnectBase C++ SDK로 멀티플레이와 데이터를 연동합니다

이 튜토리얼에서 배울 내용
Unreal SDK 플러그인 설치
C++에서 SDK 초기화
게임서버 연결 및 룸 관리
Blueprint 연동

Unreal Engine 연동

Unreal Engine에서 ConnectBase C++ SDK를 사용하여 멀티플레이, 데이터 저장, 실시간 통신을 구현합니다.

완성된 기능

  • Unreal Engine 프로젝트에 ConnectBase 플러그인 설치
  • C++에서 SDK 초기화 및 서버 연결
  • 게임서버 룸 생성/참여
  • Blueprint에서 SDK 기능 호출

사전 준비

  1. Unreal Engine 5.2 이상이 설치되어 있어야 합니다
  2. C++ 프로젝트로 생성되어 있어야 합니다 (Blueprint 전용은 C++ 변환 필요)
  3. ConnectBase 콘솔에서 앱을 만들고 Public Key를 확인합니다

1. 플러그인 설치하기

방법 1: Marketplace (권장)

  1. Epic Games Launcher → Marketplace
  2. "ConnectBase" 검색
  3. 무료프로젝트에 추가 클릭
  4. 프로젝트를 선택하고 설치

방법 2: 수동 설치

  1. GitHub Releases에서 최신 버전 다운로드
  2. 압축 해제하여 Plugins/ConnectBase/ 폴더에 복사
  3. .uproject 파일에 플러그인 추가:
json
{
  "Plugins": [
    {
      "Name": "ConnectBase",
      "Enabled": true
    }
  ]
}
  1. 프로젝트를 다시 빌드합니다

2. SDK 초기화하기

게임 시작 시 SDK를 초기화합니다. GameInstance 클래스에서 설정하는 것을 권장합니다.

MyGameInstance.h:

cpp
#pragma once
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "ConnectBase/ConnectBaseClient.h"
#include "MyGameInstance.generated.h"

UCLASS()
class UMyGameInstance : public UGameInstance
{
    GENERATED_BODY()

public:
    virtual void Init() override;

    UPROPERTY()
    UConnectBaseClient* CB;
};

MyGameInstance.cpp:

cpp
#include "MyGameInstance.h"

void UMyGameInstance::Init()
{
    Super::Init();

    // SDK 초기화 — Public Key는 프로젝트 설정에서 관리
    CB = UConnectBaseClient::Create("cb_pk_...");
    CB->Connect();

    UE_LOG(LogTemp, Log, TEXT("ConnectBase SDK 초기화 완료"));
}

💡 Public Key를 코드에 직접 넣는 대신, DefaultGame.ini에서 관리하는 것을 권장합니다:

ini
[ConnectBase]
PublicKey=cb_pk_...

3. 게임서버 연결 & 룸 관리

멀티플레이 게임의 룸을 생성하고 참여합니다.

cpp
// 새 룸 생성
void AMyGameMode::CreateRoom()
{
    auto* GI = GetGameInstance<UMyGameInstance>();

    FRoomOptions Options;
    Options.MaxPlayers = 4;
    Options.GameMode = "deathmatch";
    Options.Region = "kr";

    GI->CB->GameServer->CreateRoom(Options,
        FOnRoomCreated::CreateLambda([](const FRoom& Room)
        {
            UE_LOG(LogTemp, Log, TEXT("룸 생성됨: %s"), *Room.Id);
        })
    );
}

// 기존 룸 참여
void AMyGameMode::JoinRoom(const FString& RoomId)
{
    auto* GI = GetGameInstance<UMyGameInstance>();

    GI->CB->GameServer->JoinRoom(RoomId,
        FOnRoomJoined::CreateLambda([this](const FRoom& Room)
        {
            UE_LOG(LogTemp, Log, TEXT("룸 참여 완료: %d명"), Room.PlayerCount);

            // 상태 변경 이벤트 구독
            Room.OnStateChanged.AddLambda([this](const FGameState& State)
            {
                SyncPlayerStates(State);
            });
        })
    );
}

4. 실시간 상태 동기화

cpp
// Tick에서 내 상태 전송
void AMyPlayerController::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    if (IsLocalController() && GetPawn())
    {
        FPlayerState State;
        State.Position = GetPawn()->GetActorLocation();
        State.Rotation = GetPawn()->GetActorRotation();
        State.Animation = CurrentAnimState;

        auto* GI = GetGameInstance<UMyGameInstance>();
        GI->CB->GameServer->SendState(State);
    }
}

// 다른 플레이어 상태 수신
void AMyGameMode::SyncPlayerStates(const FGameState& State)
{
    for (const auto& Player : State.Players)
    {
        AActor* PlayerActor = FindPlayerActor(Player.Id);
        if (PlayerActor)
        {
            // 부드러운 보간 이동
            FVector NewLocation = FMath::VInterpTo(
                PlayerActor->GetActorLocation(),
                Player.Position,
                GetWorld()->GetDeltaSeconds(),
                10.0f
            );
            PlayerActor->SetActorLocation(NewLocation);
        }
    }
}

5. Blueprint 연동

C++ 없이 Blueprint에서도 SDK를 사용할 수 있습니다:

  1. Get ConnectBase 노드로 SDK 인스턴스 획득
  2. Create Room / Join Room 노드로 룸 관리
  3. Send State 노드로 상태 전송
  4. On State Changed 이벤트로 상태 수신

💡 Blueprint 노드는 C++ API를 그대로 감싸고 있으므로, 동일한 기능을 사용할 수 있습니다.

6. 빌드 & 테스트

  1. 에디터에서 테스트: PIE(Play In Editor)에서 2인 이상 테스트
    • Play → Number of Players: 2
    • Net Mode: Play As Client
  2. 패키징: File → Package Project로 빌드
  3. Dedicated Server: Server Target으로 별도 빌드 가능

다음 단계

  • 매치메이킹CB->GameServer->FindMatch()로 자동 매칭
  • 보이스 채팅 — WebRTC 기반 음성 채팅 연동
  • 리더보드 — 데이터베이스에 점수 저장 및 순위 조회
  • 인앱 결제 — 서버리스 함수로 결제 처리

이 튜토리얼이 도움이 됐나요?