본문 바로가기
Unreal Engine Practice

Unreal Engine Reflection&Replication

by Srff5123 2024. 1. 9.
728x90

Reflection (리플렉션)이란

프로그램이 런타임에 자신을 검사하는 기능으로, 언리얼의 베이스가 되는 프로퍼티 시스템이다.

이 기능은 Editor의 detail pannel과 BluePrint/C++ 등 많은 시스템을 지원하는데 C++은 Reflection을 지원하지 않기에 UnrealEngine에서 자체적으로 c++ 클래스, 구조체, 함수, 멤버 변수 및 열거에 대한 정보를 수집, 조작하는 자체 시스템이 구축되어 있다.  수집된 정보는 UClass에 보관이 되며, 런타임에는 GetClass() 함수를 통하여 접근하고, 컴파일 타임에서는

StaticClass()를 이용하여 접근한다. 

 

리플렉션으로 가질 수 있는 오브젝트는

열거형  UENUM(), 클래스 UCLASS(), 구조체 USTRUCT(), 함수 UFUNCTION(), 멤버변수 UPROPERTY() 를 사용할수 있고,

오브젝트가 리플렉션을 가지게 되면 디테일 패널, 직렬화, 블루프린트 등 언리얼의 유용한 시스템에서 사용될 수 있다. 이러한 리플렉션 기능을게 하려면 오브젝트의 c++ 헤더 파일에

#include "FileName.generated.h" 

위의 헤더를 포함을 시켜야 시스템 구현이 필요하다는 것을 UHT(Unreal Header Tool)에 전달하게 된다.

 

 

UCLASS() 매크로 지정자

 

언리얼 오브젝트에 특별한 기능을 추가하는 구문을 지정자 라고 한다. UCLASS뒤 ()에 특수한 기능을 하는 지정자를 삽입하며, 각 UObject마다 사용하는 지정자가 다르다.자주 사용되는 것으로는 Abstract, Blueprintable, BlueprintType이 있다. 사용하는 지정자는 언리얼 공식문서에서 확인할수있다. https://docs.unrealengine.com/5.2/ko/class-specifiers/

 

클래스 지정자

클래스가 엔진과 에디터의 다양한 부분과 어떻게 작동하는지를 지정하기 위해 UClass 선언시 사용되는 키워드입니다.

docs.unrealengine.com

 

GENERATED_BODY() 매크로

 

언리얼 오브젝트로 만든 클래스가 언리얼 시스템을 위한 추가적인 함수로, Super:: 또는 ThisClass::와 같은 유용한 typedef를 사용할 수 있게 해준다.

 

오브젝트가 리플렉션을 가지게 되면 언리얼 에디터에서 만들어진 클래스를 확인할 수 있게 되고, VisibleAnywhere지정자가 있어 디테일 패널에서 값도 확인할 수 있다.

 

Replication(리플리케이션)

리플리케이션을 알기전에 먼저 언리얼의 액터에 대해 먼저 알아보자

언리얼에서 액터란, 게임 씬에 배치할 수 있는 모든 오브젝트로 예를들어 액터는 조작 관련 컴포넌트나, 게임의 시작, 등 여러 기능으로 이루어져 있는 것을말한다.

 

리플리케이션이란, 데이터와의 명령 통신 방식으로, 예를 들어 캐릭터가 데미지를 받는 이벤트가 생겼을 경우, 그 데미지 터리를 다른 클라이언트에 전송하는 것을 체력값을 리플리케이션 한다고 한다,

즉 서버에서 직접 그 변화를 처리하고, 그 변화가 적법한 것인지 확인을 한 뒤, 체력감소와 다른 클라이언트에게 리플리케이트를 하는 것이다.

 

변수 리플리케이션은, 액터가 가지고 있는 변수에게 Replicatied 항목의 옵션을 켜주면 동작시킬수있고, 옵션이 켜진 변수가 서버에서 값이 변하면 클라이언트에서 동기화 처리가 된다.

 

RepNotify

변수가 변했을 때 특정한 행동을 넣는 옵션으로, 해당 변수가 수정되었을 때 호출되는 Call back 함수하나가 추가되는데, 이 함수를 통해 값이 바뀌면 특정 동작이 구현되도록 할 수 있다. 

 

RPC(Remote Proceuder Call)

변수 뿐만 아니라, 함수 호출 또한 리플리케이션이 가능하다.

캐릭터가 스킬을 쓰거나, 아이템을 얻었을 경우의 이펙트를 구현하고자 할때,

Remote Proceuder 호출을 통하여 특정 위치에 이펙트를 줄 수 있는데 호출 여부가 두가지가 존재한다.

 

1. Reliable 옵션으로  반드시 호출이 보장되는 것과

2. Unreliable로 네트워크 트래픽 상황에 따라 호출이 안될 수 있다.

 

블루프린트에서 New Custom Event를 생성하면 Event노드에서 리플리케이트 옵션을 설정 할 수 있는데, 멀티 캐스트로 하며느 서버에서 다른 클라이언트로 리플리케이션 하는 것으로 설정이 가능하다.

 

 

728x90

'Unreal Engine Practice' 카테고리의 다른 글

Unreal Engine FName, FText, Fstring  (0) 2024.01.12
Unreal Engine Blend Space  (0) 2024.01.10
Unreal Engine Hierarchy  (0) 2024.01.09
UE 5.2 Use Animation Montage  (0) 2023.11.14
Unreal 5 Mixamo character setting  (1) 2023.11.03