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로 다뤄진다. .as도 vtable를 이용할 수 없기 때문에, 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");
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 |