Unreal/언리얼 엔진 5로 개발하는 멀티플레이어 게임(Book)
[Unreal] US_Character Class 코드 분석(데이터 테이블 읽기)
suppresswisely
2025. 3. 25. 13:40
US_Character.h
UCLASS()
class UNREALSHADOWS_LOTL_API AUS_Character : public ACharacter
{
...
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Character Data", meta = (AllowPrivateAccess = "true"))
class UDataTable* CharacterDataTable;
struct FUS_CharacterStats* CharacterStats;
...
public:
...
void UpdateCharacterStats(int32 CharacterLevel);
FORCEINLINE FUS_CharacterStats* GetCharacterStats() const { return CharacterStats; }
...
}
- CharacterDataTable: 블루프린트 에서 데이터 테이블을 직접 참조할 수 있게 해준다.
- CharacterStats: 구조체 선언은 데이터 테이블에서 단일 행을 참조해 캐릭터 스탯으로 활용하게 해준다.
US_Character.cpp
void AUS_Character::UpdateCharacterStats(int32 CharacterLevel)
{
if (CharacterDataTable)
{
TArray<FUS_CharacterStats*> CharacterStatsRows;
CharacterDataTable->GetAllRows<FUS_CharacterStats>(TEXT("US_Character"), CharacterStatsRows);
if (CharacterStatsRows.Num() > 0)
{
const auto NewCharacterLevel = FMath::Clamp(CharacterLevel, 1, CharacterStatsRows.Num());
CharacterStats = CharacterStatsRows[NewCharacterLevel - 1];
GetCharacterMovement()->MaxWalkSpeed = GetCharacterStats()->WalkSpeed;
}
}
}
- GetAllRow<T>(): 멤버 함수를 사용해 테이블의 모든 행을 지역 배열로 가져온다.
- FMath::Clamp: 값을 Min과 Max 사이로 제한한다. 즉 CharacterLevel을 1에서 CharacterStatsRows.Num()까지 제한 한다.
- CharacterStatsRows[NewCharacterLevel - 1]: 캐릭터의 레벨이 1이면 행번호는 0이되도록 -1을 한다.
- GetCharacterMovement()->MaxWalkSpeed = GetCharacterStats()->WalkSpeed: 실제로 캐릭터의 속도에 적용한다.