서버 로직의 소유권을 C++에서 AngelScript로 이동했다.
C++은 서버 로직을 실행하기 위한 네트워크와 Reflection 기반을 제공하고
AngelScript는 그 기반 위에서 실제 서버 처리 규칙을 구현한다.

이 구조는 Unreal Engine의 네트워크 안정성과 AngelScript의 빠른 반복 작업 장점을 함께 사용하기 위한 역할 분리 방식이다.

AngelScript 수정은 재빌드가 필요하지 않기 때문에 빠른 개발이 가능함


역할 분담

영역 담당
C++ 네트워크 RPC 선언, Unreal Reflection 연결, BlueprintNativeEvent 제공, 공통 helper
AngelScript 서버 로직 구현, 입력 처리 규칙, 판정 흐름, 서버 상태 처리
Blueprint 에셋 연결, UI 구성, 클래스 지정, 시각적 구성

이 구조를 통해 게임 규칙이 빌드없이 스크립트 변경으로 이루질 수 있음

구조 개요

Client Input
  -> PlayerController
  -> Server RPC
  -> GameMode BlueprintNativeEvent
  -> AngelScript BlueprintOverride
  -> C++ helper
  -> Client RPC

클라이언트 입력은 PlayerController를 통해 서버 RPC로 전달.
서버에 도착한 요청은 GameMode의 BlueprintNativeEvent 함수로 연결.
AngelScript는 해당 함수를 BlueprintOverride로 구현하여 실제 서버 처리 로직을 수행.

C++의 역할

C++ 클래스는 Unreal Engine의 시스템 계층과 직접 연결.

주요 책임:

  • UCLASS() 기반 타입 정의
  • UFUNCTION(Server) RPC 선언
  • UFUNCTION(Client) RPC 선언
  • BlueprintNativeEvent로 Script 구현 지점 제공
  • BlueprintCallable로 Script에서 호출 가능한 helper 제공
  • Actor 순회, Client RPC 호출 같은 엔진 밀착 코드 제공

AngelScript의 역할

주요 책임:

  • 서버 요청 처리
  • 게임 규칙 적용
  • 입력값 해석
  • 판정 결과 생성
  • 서버 상태 변경
  • C++ helper 호출을 통한 결과 전파

BlueprintNativeEvent 연결

C++ 함수를 Unreal Reflection에 등록.
AngelScript 함수가 해당 호출 경로에 실제 구현을 연결

C++ 선언:

UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void HandleServerMessage(...);

AngelScript 구현:

UFUNCTION(BlueprintOverride)
void HandleServerMessage(...)
{
}

RPC와 Script의 관계

RPC 선언이 Unreal Engine 네트워크 시스템과 강하게 연결되어 있어 C++에 구현.
AngelScript는 RPC가 서버에 도착한 이후의 처리 내용을 담당.

Client
  -> Server RPC
  -> C++ entry point
  -> AngelScript server logic

Helper 함수

Actor 순회, 특정 Client RPC 호출, 공통 출력 처리처럼 엔진 API와 밀접한 작업은 C++ helper로 제공.

AngelScript는 이 helper를 호출하여 결과를 전파.
AngelScript는 게임 규칙에 집중하고, C++은 엔진 저수준 작업을 담당하는 구조.

UFUNCTION(BlueprintCallable)
void BroadcastMessage(...);

설계 원칙

  • C++은 네트워크와 엔진 연결을 담당한다.
  • AngelScript는 서버 게임 규칙을 담당한다.
  • Blueprint는 에셋과 시각적 구성을 담당한다.
  • 서버 로직은 C++ 함수 본문에 직접 고정하지 않는다.
  • Script에서 구현할 함수는 C++에서 BlueprintNativeEvent로 제공한다.
  • Script에서 호출할 공통 기능은 C++에서 BlueprintCallable로 제공한다.
  • RPC는 C++에 두고, RPC 이후의 처리 흐름은 Script로 넘긴다.

장점

이 구조의 장점:

  • 서버 규칙 변경 시 C++ 빌드 의존도가 줄어든다.
  • 게임 로직을 텍스트 기반 Script로 관리할 수 있다.
  • Blueprint 그래프보다 diff, review, merge가 쉽다.
  • 네트워크 기반 구조는 C++에 유지되어 안정적이다.
  • 서버 처리 흐름을 Script에서 빠르게 수정할 수 있다.
  • C++과 Script의 책임 경계가 명확해진다.

주의 사항

AngelScript override는 C++ 일반 virtual override와 다르다.
C++ 함수가 BlueprintNativeEvent 또는 BlueprintImplementableEvent로 선언되어야 BlueprintOverride로 연결할 수 있다.

BlueprintCallable만 붙은 함수는 호출 가능할 뿐 override 대상이 아니다.

AngelScript 함수 시그니처는 C++ 이벤트 시그니처와 정확히 맞아야 한다.
참조 매개변수는 const FString&in처럼 AngelScript 방식으로 맞춰야 한다.

C++ 프로퍼티와 함수 이름이 accessor로 연결될 수 있으므로, Script override 내부에서 같은 의미의 프로퍼티를 대입할 때 재귀가 발생하지 않는지 확인해야 한다.

반응형

'TIL' 카테고리의 다른 글

Angel Script 기반 간단한 멀티플레이 게임 만들기  (0) 2026.08.12
UE Angel Script 패키징  (0) 2026.08.10
UE Angel Script 문법  (0) 2026.08.05
Unreal Engine Angel Script  (0) 2026.08.03
UE NetRole  (0) 2026.07.31