Unreal Engine에서 UFUNCTION
은 C++ 함수에 메타데이터를 추가하여 이 함수를 엔진의 여러 시스템(예: 블루프린트, 리플렉션 시스템, 네트워크 복제 등)에서 사용할 수 있게 하는 데 사용됩니다. UFUNCTION
은 Unreal Engine의 리플렉션 시스템에서 중요한 역할을 하며, 함수의 동작을 제어하는 다양한 플래그와 함께 사용할 수 있습니다.
UFUNCTION
기본 사용법
UFUNCTION([Modifiers]) ReturnType FunctionName(Parameters);
여기서 [Modifiers]
는 UFUNCTION
에 추가할 수 있는 메타데이터 플래그입니다. 이 플래그는 함수가 어떻게 작동할지, 어디서 사용될지를 지정합니다.
UFUNCTION
주요 Modifiers
- BlueprintCallable:
- 이 함수는 블루프린트에서 호출할 수 있습니다.
- 예시:
cpp UFUNCTION(BlueprintCallable, Category="MyCategory") void MyFunction();
- BlueprintImplementableEvent:
- C++에서 구현하지 않고, 블루프린트에서 구현할 수 있는 함수를 정의합니다. C++에서는 함수의 본문이 없습니다.
- 예시:
cpp UFUNCTION(BlueprintImplementableEvent, Category="MyCategory") void MyBlueprintEvent();
- BlueprintNativeEvent:
- C++에서 기본 구현을 제공할 수 있지만, 블루프린트에서도 재정의할 수 있는 함수를 정의합니다.
- 예시:
cpp UFUNCTION(BlueprintNativeEvent, Category="MyCategory") void MyNativeEvent(); virtual void MyNativeEvent_Implementation();
- BlueprintPure:
- 이 함수는 상태를 변경하지 않는다는 것을 나타냅니다. 즉, 함수는 게임 상태를 변경하지 않고 값을 반환하기만 합니다.
- 예시:
cpp UFUNCTION(BlueprintPure, Category="MyCategory") int32 GetHealth() const;
- Server, Client, NetMulticast:
- 네트워크 복제를 위해 사용됩니다.
Server
는 서버에서만 호출될 수 있고,Client
는 클라이언트에서만 호출됩니다.NetMulticast
는 서버에서 호출되어 모든 클라이언트로 복제됩니다. - 예시:
cpp UFUNCTION(Server, Reliable, WithValidation) void ServerFunction();
- Exec:
- 이 함수는 게임 콘솔에서 호출할 수 있는 콘솔 명령어를 정의합니다.
- 예시:
cpp UFUNCTION(Exec) void MyConsoleCommand();
- Reliable/Unreliable:
- 네트워크 함수 호출의 신뢰성을 나타냅니다.
Reliable
은 네트워크에서 손실되지 않음을 보장하고,Unreliable
은 그렇지 않습니다. - 예시:
cpp UFUNCTION(Client, Reliable) void MyClientFunction();
- Category:
- 블루프린트 노드의 카테고리를 지정하여 정리합니다.
- 예시:
cpp UFUNCTION(BlueprintCallable, Category="Gameplay") void PerformAction();
UFUNCTION
의 다양한 예제
- 블루프린트에서 호출 가능한 함수:
UFUNCTION(BlueprintCallable, Category="MyCategory") void MyBlueprintCallableFunction();
이 함수는 블루프린트에서 호출할 수 있으며, 블루프린트 노드로 MyCategory
아래에 나타납니다.
- 블루프린트에서 구현하는 이벤트:
UFUNCTION(BlueprintImplementableEvent, Category="MyCategory") void MyEvent();
이 함수는 C++에서 구현하지 않지만, 블루프린트에서 구현하여 이벤트를 처리할 수 있습니다.
- 블루프린트에서 재정의할 수 있는 함수:
UFUNCTION(BlueprintNativeEvent, Category="MyCategory") void MyNativeEvent(); virtual void MyNativeEvent_Implementation();
MyNativeEvent
는 C++에서 기본 구현을 제공할 수 있으며, 블루프린트에서 이 기본 구현을 재정의할 수 있습니다.
- 서버에서만 호출되는 함수:
UFUNCTION(Server, Reliable, WithValidation) void MyServerFunction();
이 함수는 서버에서만 호출될 수 있으며, 신뢰성이 보장됩니다. WithValidation
은 서버에서 호출하기 전에 추가 검사를 수행하는 데 사용됩니다.
- 콘솔 명령어 함수:
UFUNCTION(Exec) void MyExecFunction();
이 함수는 게임의 콘솔에서 호출할 수 있습니다.
요약
UFUNCTION
은 Unreal Engine에서 함수에 메타데이터를 추가하여 블루프린트, 네트워크 복제, 콘솔 명령어 등 다양한 기능을 지원할 수 있게 하는 중요한 매크로입니다. 이를 통해 개발자는 C++과 블루프린트 간의 상호 작용을 보다 쉽게 관리할 수 있습니다.