US_Character.h
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "US_Character.generated.h"
UCLASS()
class UNREALSHADOWS_LOTL_API AUS_Character : public ACharacter
{
GENERATED_BODY()
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera", meta = (AllowPrivateAccess = "true"))
TObjectPtr<class USpringArmComponent> CameraBoom;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera", meta = (AllowPrivateAccess = "true"))
TObjectPtr<class UCameraComponent> FollowCamera;
...
public:
...
FORCEINLINE USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; }
}
해당 코드를 살펴보면 가장 눈에 뛰는 것은 UPROPERTY와 TObjectPtr일 것이다. 먼저 UPROPERTY는 이전 글에 잠깐 설명하였지만, 개인적으로도 궁금하여 좀 더 살펴보려고 한다.
UPROPERTY
이전 글에서는 리플렉션 시스템에서 '관련된 멤버 변수가 블루프린트 접근성이나 네트워크 복제와 같은 추가 기능이 있음을 엔진에 알리는 데 사용된다.'로 정의된 것을 볼 수 있다.
언리얼 UPROPERTY( Unreal UPROPERTY )
언리얼 엔진 위에서 언리얼 엔진과 상호작용하려는 코드를 작성하기 위해서는 언리얼에서 제공하는 각종 매크로의 도움을 받을 수 밖에 없습니다. 그 중, UPROPERTY는 멤버 변수( 또는 프로퍼티 )
minusi.tistory.com
정의는 알아도 사용 방법을 모르기에 언리얼 공식 문서에 프로퍼티를 참고할 수 있지만, 위 글이 더 잘 정리되어 있어 참고하면 좋다.
다만 Category에 대한 설명이 없어 보충하자면, 위와 같이 디테일의 카테고리를 정하여 설정할 수 있는 역할이다.
TObjectPtr<T>
이 템플릿은 언리얼 엔진 5에 새로 추가된 것으로, 헤더 파일에 원시 포인터(ex: USpringComponent*)를 UPROPERTY로 대체하기 위해 도입되었다. TObjectPtr<T> 템플릿은 코드의 헤더에서 선언된 멤버 프로퍼티에만 사용해야 한다.
cpp 파일 내부의 함수나 짧은 코드 블록에서는 TObjectPtr<T>를 사용해도 원시 포인터를 사용하는 것에 비해 추가적인 이점이 없다.
FORCEINLINE
USpringArmComponent인 CameraBoom을 예로 들면, GetCameraBoom()의 역할은 CameraBoom을 리턴하는 것이다. 그렇다면 인라인으로 만들면 빠르게 처리할 수 있을 것이다. 이러한 인라인으로 처리하게 해주는 매크로가 FORCEINLINE이다.
'Unreal > 언리얼 엔진 5로 개발하는 멀티플레이어 게임(Book)' 카테고리의 다른 글
[Unreal] 입력 액션 설정 방법 (0) | 2025.03.22 |
---|---|
[Unreal] US_Character.cpp 생성자 코드 분석(카메라) (0) | 2025.03.22 |
[Unreal] US_GameMode Class 생성자 코드 분석 (0) | 2025.03.21 |
[Unreal] 프로젝트 - 맵 & 모드 설정 (0) | 2025.03.21 |
[Unreal] 첫 번째 멀티플레이어 환경 설정 (0) | 2025.03.18 |