게임 개발/프로젝트

언리얼 내배캠 CH.3 팀 프로젝트 - 옵션 설정 체크박스 만들기

이개 2026. 5. 19. 16:42

옵션 화면 위젯 스위처

 

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

 

 

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

 

 

설명과 체크박스를 추가한다.

 

참고로 체크박스의 배경 이미지 크기를 전부 똑같이 설정해주어야 호버 시에 크기가 오락가락하지 않는다.
체크박스 디테일창에서 변수 여부에 체크해주고, 체크 스테이트 변경 시 이벤트 옆 버튼을 눌러 이벤트를 추가한다.
Select 노드를 사용하면 3번째 와일드카드 핀에 대한 입력으로 다양한 변수 타입에 따라 출력을 선택할 수 있다. 체크박스의 경우 체크와 체크 해제의 경우를 리턴한다.

 

 

 

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;
        }
    }
}

 

 

저장한 설정을 불러오는 노드. 체크 상태도 저장된 설정과 똑같이 출력한다.

 

Options 화면이 로드될 때 진행해준다.