
언리얼 위젯 블루프린트에는 Widget Switcher라는 패널이 있다. 이 패널은 자식 패널들에 순서대로 0부터 인덱스를 부여하여 해당 인덱스의 상태에 따라 보여주는 패널을 바꿔준다.

상단에 버튼을 달아서 클릭 이벤트에 해당하는 인덱스를 할당해준다.





SaveGameSettings라는 이름으로 저장할 변수들을 모아 USaveGame을 상속받은 클래스를 만든다.
UCLASS()
class LASTARTEMIS_API ULA_SaveGameSettings : public USaveGame
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, Category = "Settings")
EMovementInputMode SavedAimInputMode = EMovementInputMode::Toggle;
UPROPERTY(BlueprintReadWrite, Category = "Settings")
EMovementInputMode SavedSprintInputMode = EMovementInputMode::Toggle;
UPROPERTY(BlueprintReadWrite, Category = "Settings")
float MasterVolume = 1.0f;
};
게임 내내 설정이 사라지지 않도록 GameInstance에 설정을 저장하거나 불러오는 함수를 만들어준다.
void ULA_GameInstance::Init()
{
Super::Init();
LoadSettingsFromDisk();
}
void ULA_GameInstance::UpdateAndSaveSettings(EMovementInputMode NewAimMode, EMovementInputMode NewSprintMode)
{
// 메모리 값 업데이트
CurrentAimInputMode = NewAimMode;
CurrentSprintInputMode = NewSprintMode;
// 즉시 파일로 저장
ULA_SaveGameSettings* SaveObj = Cast<ULA_SaveGameSettings>(UGameplayStatics::CreateSaveGameObject(ULA_SaveGameSettings::StaticClass()));
if (SaveObj)
{
SaveObj->SavedAimInputMode = CurrentAimInputMode;
SaveObj->SavedSprintInputMode = CurrentSprintInputMode;
UGameplayStatics::SaveGameToSlot(SaveObj, SettingsSlotName, 0);
}
// 캐릭터가 있다면 즉시 반영
ApplySettingsToCharacter();
}
void ULA_GameInstance::ApplySettingsToCharacter()
{
APlayerController* PC = UGameplayStatics::GetPlayerController(GetWorld(), 0);
if (PC && PC->GetPawn())
{
ALA_PlayerCharacter* Character = Cast<ALA_PlayerCharacter>(PC->GetPawn());
if (Character)
{
Character->AimInputMode = CurrentAimInputMode;
Character->SprintInputMode = CurrentSprintInputMode;
}
}
}
void ULA_GameInstance::LoadSettingsFromDisk()
{
if (UGameplayStatics::DoesSaveGameExist(SettingsSlotName, 0))
{
ULA_SaveGameSettings* LoadObj = Cast<ULA_SaveGameSettings>(UGameplayStatics::LoadGameFromSlot(SettingsSlotName, 0));
if (LoadObj)
{
CurrentAimInputMode = LoadObj->SavedAimInputMode;
CurrentSprintInputMode = LoadObj->SavedSprintInputMode;
}
}
}


'게임 개발 > 프로젝트' 카테고리의 다른 글
| 언리얼 게임 패키징하기 (0) | 2026.05.27 |
|---|---|
| 언리얼 내배캠 CH.3 팀 프로젝트 - 오디오/사운드 볼륨 설정 만들기 (0) | 2026.05.20 |
| 언리얼 C++ 클래스에 만들어둔 위젯 블루프린트 연동하기 (0) | 2026.05.13 |
| 언리얼 내배캠 CH.3 팀 프로젝트 - 임무 선택 화면 만들기 (0) | 2026.05.11 |
| 언리얼 내배캠 CH.3 팀 프로젝트 - 메인 메뉴 만들기 (0) | 2026.05.04 |