Angel Script는 C++/C#/Java 스타일의 강타입 임베디드 스크립트 언어로 C++과 Blueprint 중간쯤이다.
그래서 Unreal AngelScript는 C++ 비슷한 문법을 사용한다.

AngelScript는 포인터/헤더/빌드/매크로/소유권 부담이 줄어들고, Unreal 타입, UFUNCTION, UPROPERTY, const, nullptr, class 상속 문법을 유지한다.


포인터 문법

*, ->, TObjectPtr<> 같은 걸 직접 의식하지 않고 .로 접근

C++:

APlayerController* PC = GetWorld()->GetFirstPlayerController();
if (PC != nullptr)
{
    PC->SetShowMouseCursor(true);
}

AngelScript:

APlayerController PC = Gameplay::GetPlayerController(0);
if (PC != nullptr)
{
    PC.bShowMouseCursor = true;
}

Unreal reflection 매크로가 문법

UCLASS(), UPROPERTY(), UFUNCTION(), GENERATED_BODY(), .generated.h 등 사용하지 않음

AngelScript:

class ACXScriptPlayerController : APlayerController
{
    UPROPERTY(Category = "Chat")
    TSubclassOf<UCXChatInputWidget> ChatInputWidgetClass;

    UFUNCTION(BlueprintOverride)
    void BeginPlay()
    {
    }
};

override 방식

Unreal/Blueprint 쪽에 이미 존재하는 이벤트나 overridable 함수를 스크립트에서 override할 때

C++:

virtual void BeginPlay() override;

AngelScript:

UFUNCTION(BlueprintOverride)
void BeginPlay()
{
}

Unreal Reflection/Blueprint 이벤트 경로로 노출된 overridable 함수를 AngelScript에서 구현한다

Unreal에서 BeginPlay, Tick, ReceiveActorBeginOverlap 같은 것들은 Blueprint 쪽에서는 이벤트 override로 다뤄진다. .asvtable를 이용할 수 없기 때문에, Blueprint의 방식인 Unreal의 reflection/Blueprint override 경로를 통해 엔진 이벤트에 연결된다.

참조 문법

AngelScript에서는 const FText&in.

void OnChatInputTextCommitted(const FText&in Text, ETextCommit CommitMethod)

AngelScript 참조에는 방향이 붙을 수 있습니다.

&in    // 입력 참조
&out   // 출력 참조
&inout // 입출력 참조

값/객체/핸들 사용

C++:

FVector Value;
AActor* Actor;
TObjectPtr<UWidget> Widget;
TSubclassOf<UUserWidget> WidgetClass;

AngelScript:

AActor Actor;
UUserWidget Widget;
TSubclassOf<UUserWidget> WidgetClass;

UObject는 객체 참조/핸들처럼 다룰 수 있음. nullptr 체크 가능.

if (Widget != nullptr)
{
    Widget.AddToViewport();
}

CDO(Class Default Object)

기존 기본값(CDO)을 쓰려면 default를 사용해야함

AngelScript:

class AMyActor : AActor
{
    default bReplicates = true; // CDO 변수
    default Tags.Add(n"ChatActor"); // CDO 변수
};

default 설정 안하면

  • Editor의 Details 패널에 값 반영이 안됨.
  • Blueprint 상속 클래스의 기본값으로 안 잡힐 수 있음
  • 에디터에서 배치한 인스턴스와 런타임 생성 인스턴스의 값이 다르게 보일 수 있음
  • 저장/로드/리인스턴싱 때 기대한 값이 유지되지 않을 수 있음

FName 리터럴 문법

n"..."FName 리터럴.

AngelScript:

EditableTextBox_ChatInput.OnTextCommitted.AddUFunction(this, n"OnChatInputTextCommitted");

Print

C++:

UE_LOG(LogTemp, Log, TEXT("Value: %d"), Value);

AngelScript:

Print(f"Value: {Value}");
Print("Hello");

생성/캐스팅 문법

포인터와 소유권 처리 X
C++:

UCXChatInput* Widget = CreateWidget<UCXChatInput>(this, WidgetClass);
ACXPlayerController* PC = Cast<ACXPlayerController>(GetOwningPlayer());

AngelScript:

UCXChatInputWidget Widget = Cast<UCXChatInputWidget>(
    WidgetBlueprint::CreateWidget(ChatInputWidgetClass, this)
);

ACXScriptPlayerController PC = Cast<ACXScriptPlayerController>(GetOwningPlayer());
반응형

'TIL' 카테고리의 다른 글

UE Angel Script 패키징  (0) 2026.08.10
Angel Script을 이용한 서버 로직 분리  (0) 2026.08.07
Unreal Engine Angel Script  (0) 2026.08.03
UE NetRole  (0) 2026.07.31
UE Authority  (0) 2026.07.30