C++ 코드 안의 클래스/변수/함수 정보를
엔진(BP/에디터/리플렉션 런타임)에서도 인식하고 다룰 수 있게
해주는 메타데이터 시스템
보통 C++은 컴파일 이후 정보(변수명/타입 등)가 전부 사라지기 때문에
런타임이나 툴(에디터/BP)이 접근할 수 없음.
하지만 언리얼은 리플렉션 시스템 덕분에
엔진이 클래스/변수/함수의 구조를 스스로 인식하고 조작 가능하게 함.
즉 BP에서 C++ 함수를 호출하고
UPROPERTY를 에디터에서 노출하고
세이브/로딩, 네트워크 복제(Replication) 등을 가능하게 함.
BlueprintCallable
→ 블루프린트에서 이 함수를 호출 가능
BlueprintPure
→ 블루프린트에서 호출 할 수 있지만, 상태를 변경하지 않음(순수 함수)
BlueprintImplementableEvent
→ C++ 에서 선언만 하고 , 블루프린트 상에서 기능 구현
BlueprintNativeEvent
→ C++ 에서도 기본 구현 가능
→ 블루프린트에서 오버라이드 가능
Server / Client / NetMulticast
→ 네트워크 용 RPC 함수 지정
Reliable / Unreliable
→ RPC 전송 신뢰성 지정
EditAnywhere
→ 에디터에서 수정 가능 (모든 상황에서 노출)
EditDefaultsOnly
→ 블루프린트 디폴트 값만 수정 가능
VisibleAnywhere
→ 읽기 전용, 에디터에서 값만 표시 (수정 불가능)
BlueprintReadOnly
→ 블루프린트에서 읽기(Get)만 가능
BlueprintReadWrite
→ 블루프린트에서 읽기(Get) / 쓰기(Set) 가능
Transient
→ 저장/로딩 안됨 (임시 데이터)
Replicated
→ 네트워크로 복제됨