세션 설정

이 페이지는 작업 중입니다.

SML3.5에서 도입된 세션 설정(게임 내에서 모드 저장 게임 설정으로 언급됨)은 고급 게임 설정과 유사한 기능으로, 모드가 게임 저장 기준으로 구성 정보를 저장할 수 있게 해줍니다. 고급 게임 설정이 활성화되지 않아도 사용할 수 있습니다.

세션 설정은 현재 맵 여행 URL에 저장되며, 로딩 과정 초기에 매우 쉽게 접근할 수 있습니다. 이는 향후 변경될 수 있습니다.

특정 레벨에만 세션 설정을 만들 수 있으며, 맞춤 레벨에 대한 구성 옵션을 제공하는 데 특히 유용합니다. 저장이 생성되기 전에 편집할 수 있습니다.

새로운 세션 설정 정의하기

세션 설정은 데이터 애셋으로 정의됩니다. 블루프린트에서 세션 설정을 만들려면, 콘텐츠 브라우저에서 우클릭하고 고급 자산 생성 > 기타 > 데이터 애셋을 선택한 후 SMLSessionSetting을 검색합니다.

Str Id 선택하기

세션 설정은 UFGUserSetting에서 상속되며, 이는 게임이 설정 메뉴에서 구성 옵션을 정의하는 데 사용하는 클래스입니다.

"Str Id" 필드는 세션 설정의 고유 식별자이며, 나중에 세션 설정의 값을 검색하는 데 사용됩니다. 아래 표에서 Str Id의 예시와 선택 시 유의해야 할 사항을 확인하십시오.

Table 1. 예시 세션 설정 Str Id
✔️ 좋은 예시 ❌ 나쁜 예시

✔️ 모드참조.EnableFizzBuzz

모드 참조를 ID 접두사로 사용하여 모드 간에 고유성을 보장합니다.

EnableFizzBuzz

다른 모드가 이 이름으로 세션 설정을 구현할 수 있어 충돌이 발생할 수 있습니다.

✔️ 모드참조.WhizzbangStrengthMult

세션 설정은 문자열 ID로 참조되므로, 상세하고 고유한 이름을 부여하면 코드에서 설정의 모든 사용을 쉽게 찾을 수 있습니다.

모드참조.Multiplier

"뭘 위한 배수였지?" 이 설정이 무엇을 제어하는지 잊기 쉽고, 미래에 다른 "배수"를 추가하기로 결정하면, 이것과 혼동될 수 있습니다.

✔️ 모드참조.PowerCostMultFloat

세션 설정을 읽고 쓰기 위해 유형별 메서드를 사용해야 하므로, 설정의 유형을 ID의 일부로 포함하는 것을 고려하십시오. 불행히도 잘못된 getter 메서드를 사용하는 것은 현재 조용한 오류로, FG 옵션 시스템의 구현 방식 때문에 이 문제를 추적하기가 특히 어렵습니다.

✔️ 모드참조.MinerMk1.PowerCostMultFloat

유사한 이름이나 기능을 가진 여러 설정을 제공하는 경우, 어떤 건물/기능에 설정이 적용되는지를 나타내는 것을 고려하십시오.

세션 설정 동작 선택하기

UFGUserSetting의 모든 속성이 세션 설정과 관련이 있는 것은 아닙니다. 어떤 속성이 효과가 있는지 실험해 보아야 합니다. 발견한 내용을 바탕으로 "이 페이지 편집"을 통해 이 문서 페이지를 업데이트해 주십시오.

"Use CVar" 필드를 체크하는 것은 게임 콘솔을 통해 세션 설정의 값을 수정할 수 있도록 하려는 경우에만 필요합니다.

SML은 세션 설정에 대해 다음 속성 값을 자동으로 강제합니다. 이 속성을 변경하면 애셋이 다음에 로드될 때 이 값으로 자동으로 재설정됩니다.

  • ShowInBuilds: Public Builds로 설정하여 세션 설정이 사용자에게 표시되도록 합니다.

  • ManagerAvailability: USM MAX, 이는 유효하지 않은 값으로, 설정이 기본 게임 옵션 메뉴에 표시되지 않도록 합니다.

  • IsSettingSessionWide: true로 설정하여 멀티플레이 클라이언트가 세션 설정을 수정하고 변경 사항이 저장 파일에 저장될 수 있도록 합니다.

세션 설정을 저장 생성 시에만 편집 가능하게 하려면, "게임에서 표시하지 않음" 가시성 제외자를 사용하십시오.

등록

세션 설정은 플레이어가 사용할 수 있도록 등록해야 합니다.

세션 설정을 등록하려면, 모드의 게임 인스턴스 모듈에서 관련 배열에 나열해야 합니다.

세션 설정을 등록하면 SML 세션 설정 메뉴에서 구성할 수 있게 되며, 이는 월드 생성 시와 일시 정지 메뉴에서 모두 사용할 수 있습니다.

세션 설정 읽기 및 쓰기

세션 설정의 값을 읽으려면 세션 설정 관리자에서 "Get <뭐시기> Option Value" 메서드를 사용하십시오. 변경 사항에 구독하려면 "Subscribe to Dynamic Option Update"를 사용하십시오.

세션 설정의 값을 프로그래밍적으로 수정하려면, 세션 설정 관리자에서 "Set <뭐시기> Option Value" 메서드를 사용하십시오.

ExampleMod에서 세션 설정의 예시와 값을 읽는 방법을 확인할 수 있습니다. ExampleMod 레벨 블루프린트와 게임 월드 모듈에서 예시가 있습니다.

정수형 세션 설정 값을 읽는 예시 C‍+‍+:

// self->GetWorld()는 월드 컨텍스트를 얻는 다른 방법으로 대체할 수 있습니다.
USessionSettingsManager* SessionSettings = self->GetWorld()->GetSubsystem<USessionSettingsManager>();
auto optionValue = SessionSettings->GetIntOptionValue("모드참조.IntSessionSetting");

언리얼 콘솔 명령어

세션 설정이 CVar를 사용하도록 구성된 경우, 언리얼 콘솔 명령어를 사용하여 값을 설정할 수 있습니다. 예를 들어 SML.ForceAllowCheats 1은 SML 세션 설정 ForceAllowCheats를 1로 설정합니다.

세션 설정 vs 모드 구성

TODO

모드 구성은 사용자 인터페이스나 시각적 요소에 더 적합하며, 사용자의 게임과 함께 저장되고 저장 간에 유지됩니다.

세션 설정은 사용자 정의 레벨에 대한 옵션과 같이 저장 파일별 선택이 필요한 것에 적합합니다.

고급 게임 설정

세션 설정 대신 고급 게임 설정을 만들려면, SMLSessionSetting 대신 FGUserSetting 유형의 데이터 애셋을 생성하십시오.

자산 속성에서 타입을 Advanced Game Setting으로 설정하면, 게임이 자동으로 이를 발견하고 고급 게임 설정 메뉴에 추가합니다. 세션 설정과 동일한 범주 시스템을 사용하여 어떤 범주에 나타날지를 제어할 수 있습니다. 사진 모드 및 옵션 메뉴 설정에도 적용됩니다.