TAutoConsoleVariable와 FAutoConsoleVariableRef는 언리얼 엔진에서 **콘솔 변수(Console Variables, CVars)**를 선언하고 활용하기 위한 두 가지 주요 클래스입니다. 두 가지 모두 개발 중 혹은 디버그 목적으로 사용되며, 서로 다른 방식으로 콘솔 변수를 다루는 데 사용됩니다.
1. TAutoConsoleVariable
TAutoConsoleVariable은 콘솔 변수를 직접 선언하고 관리하기 위한 템플릿 클래스입니다. 선언된 콘솔 변수는 게임 실행 중 직접 값을 설정하거나 확인할 수 있으며, 데이터 타입에 따라 다양한 설정을 지원합니다.
주요 특징
- 직접적으로 변수의 값을 저장하고 관리합니다.
- 템플릿 형식으로 제공되며, 변수를 정적으로 선언하여 사용할 수 있습니다.
- Get() 메서드를 통해 현재 값을 가져올 수 있습니다.
정의
TAutoConsoleVariable을 통해 정의된 콘솔 변수는 다음과 같은 방식으로 구현됩니다:
template <typename T>
class TAutoConsoleVariable
사용 예시
static TAutoConsoleVariable<int32> CVarMyVariable(
TEXT("Game.MyVariable"),
42, // 초기값
TEXT("Example variable for demonstrating TAutoConsoleVariable usage."),
ECVF_Default
);
// 해당 변수의 값 가져오기
int32 CurrentValue = CVarMyVariable.GetValueOnGameThread();
주요 메서드
- GetValueOnGameThread(): 게임 스레드에서 변수 값을 가져옵니다.
- GetValueOnRenderThread(): 렌더링 스레드에서 변수 값을 가져옵니다.
2. FAutoConsoleVariableRef
FAutoConsoleVariableRef는 이미 선언된 콘솔 변수를 참조하여 그 값을 연결하거나 사용하는 클래스입니다. 즉, FAutoConsoleVariableRef는 실제로 값을 저장하지 않고, 다른 TAutoConsoleVariable과 연결된 변수를 참조합니다.
주요 특징
- 변수 자체를 선언하지 않고, 이미 선언된 콘솔 변수와 바인딩하여 값을 동기화합니다.
- 보통 전역 상태의 변수를 다른 개체와 공유하거나 다루기 위해 사용됩니다.
- 함수 포인터 및 콜백 함수를 통해 값 변화를 감지하거나 추가 로직을 실행할 수 있습니다.
정의
class FAutoConsoleVariableRef
static int32 MyVariable = 42;
static FAutoConsoleVariableRef CVarMyVariableRef(
TEXT("Game.MyVariableRef"),
MyVariable,
TEXT("Example variable for demonstrating FAutoConsoleVariableRef usage."),
ECVF_Default
);
// 연결된 변수 값 변경
MyVariable = 100; // Console command or code updates it
주요 활용
- 새로운 TAutoConsoleVariable을 선언하지 않고, 이미 정의되어 있는 변수에 바인딩하여 간접적인 관리가 가능합니다.
- 콜백 함수를 등록하여 콘솔 변수 값이 변경될 때 추가 로직을 실행할 수 있습니다.
콜백 사용 예시
static float MyFloatVariable = 3.14f;
static void OnConsoleVariableChanged(IConsoleVariable* Var)
{
// 값 변화 시 실행되는 로직
float NewValue = Var->GetFloat();
UE_LOG(LogTemp, Log, TEXT("MyFloatVariable has changed to: %f"), NewValue);
}
static FAutoConsoleVariableRef CVarFloatRef(
TEXT("Game.MyFloatVariable"),
MyFloatVariable,
TEXT("Monitors changes to MyFloatVariable."),
ECVF_Default,
FConsoleVariableDelegate::CreateStatic(&OnConsoleVariableChanged)
);
이 코드는 MyFloatVariable 값이 변할 때마다 로그를 출력합니다.
3. 차이점 요약
특성 TAutoConsoleVariable FAutoConsoleVariableRef
변수 선언 여부 | 새롭게 콘솔 변수 정의 | 이미 존재하는 콘솔 변수 참조 |
값 저장 여부 | 자체적으로 값을 저장 | 외부 변수와 참조 연결 |
사용 목적 | 콘솔 변수를 독립적으로 생성하고 직접 사용할 때 | 이미 선언된 변수에 연결하거나, 값 변화를 감지하여 추가 기능을 실행할 때 |
콜백 함수 지원 여부 | 지원하지 않음 | 값 변경 시 콜백을 통해 추가 로직 실행 가능 |
사용 예 | 실제 변수를 생성하여 초기 값을 설정 및 관리 | 외부 변수 혹은 함수와 연결하여 간접적으로 관리 |
4. 활용법
TAutoConsoleVariable
- 독립적인 변수 관리:
- 디버그용으로 특정 변수를 정의하고 이를 활용할 필요가 있을 때 사용합니다.
- 게임/렌더링 스레드 동작:
- 값을 설정하고 이를 게임 및 렌더링 관련 로직에서 동기적으로 활용할 때 적합합니다.
FAutoConsoleVariableRef
- 기존 변수를 연결:
- 다른 모듈 혹은 코드에서 선언된 변수를 참조하거나, 해당 변수를 콘솔 커맨드를 통해 수정할 때 유용합니다.
- 값 변화 감지 로직:
- 콜백을 통해 값 변화에 따라 특정한 로직을 수행하거나 로그를 출력하는 등 동기화 작업이 필요할 때 적합합니다.
5. 상황별 예시
A. 디버그용 변수 생성
static TAutoConsoleVariable<bool> CVarDebugFeature(
TEXT("Game.DebugFeature"),
false, // 디폴트 비활성화
TEXT("Enables or disables a debug feature."),
ECVF_Default
);
if (CVarDebugFeature.GetValueOnGameThread())
{
// 디버그 기능 활성화
}
B. 값 변화 감지 후 로직 실행
static int32 NewResolutionValue = 1920;
static void OnResolutionChanged(IConsoleVariable* Var)
{
int32 CurrentValue = Var->GetInt();
UE_LOG(LogTemp, Log, TEXT("Resolution is set to: %d"), CurrentValue);
}
static FAutoConsoleVariableRef CVarResolution(
TEXT("Game.Settings.ResolutionWidth"),
NewResolutionValue,
TEXT("Change resolution width dynamically."),
ECVF_Default,
FConsoleVariableDelegate::CreateStatic(&OnResolutionChanged)
);
'UNREAL ENGINE' 카테고리의 다른 글
[알쓸신잡] Shader Define Keyword 와 Custom Expression. (0) | 2025.03.01 |
---|---|
5.5.3 모바일 렌더링에서 라이트체널 스텐실마스크 버그 수정 (0) | 2025.02.27 |
VIEW_UNIFORM_BUFFER_MEMBER 와 VIEW_UNIFORM_BUFFER_MEMBER_PER_VIEW (0) | 2025.02.26 |
!! 연산자 (0) | 2025.02.19 |
World Partition-> Runtime Partition (0) | 2025.02.17 |