서버 로직의 소유권을 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 |