구성
키 할당을 구현하고 싶다면, 레지스트리 페이지의 모드 키 할당 레지스트리 섹션을 확인하십시오. |
SML은 기본값을 기반으로 구성 구조를 쉽게 정의할 수 있는 편리한 구성 시스템을 제공합니다. 이러한 기본값은 사용자가 게임 내 모드 메뉴에서 또는 파일 시스템에서 json 파일을 편집하여 변경할 수 있습니다.
이러한 구성 파일은 게임 부팅 시 자동으로 로드되어 사용자가 지정한 값으로 기본값을 덮어씁니다.
그러면 모드는 이 설정 데이터에 접근하여 이러한 정적 사용자 입력에 따라 동작을 변경할 수 있습니다.
모드 구성 시스템 사용하기
-
ModConfiguration을 상속하는 새 블루프린트를 만드십시오. 이름은 "<모드 참조>_Config" 또는 비슷하게 지으십시오.
-
'모드 참조’를 여러분의 모드 참조로 설정하고 표시 이름과 설명을 원하는 대로 구성하십시오.
-
루트 섹션을
BP Config Property Section
으로 설정하십시오. -
루트 섹션 > 구성 속성 > "Section Properties"에 구성하고자 하는 항목을 넣으십시오. 왼쪽은 속성 이름, 오른쪽은 유형입니다. 구성에 하위 범주를 만들고 싶다면, 속성 유형으로
BP Config Property Section
을 다시 사용하십시오. 원한다면 구성 속성에 대한 맞춤 위젯을 정의할 수 있고, 그렇지 않으면 SML이 속성 타입에 따라 자동으로 위젯을 선택합니다. -
콘텐츠 브라우저에서 구성 애셋을 우클릭하십시오.
-
C++에서 구성에 접근하고 싶다면, "Generate C++ Configuration Header"를 선택하고, 헤더를 플러그인의 소스 폴더에 저장하십시오.
-
다음으로, "Regenerate Configuration Structs"를 선택하면, SML이 모드의 설정 구조체를 자동으로 생성합니다. 매우 편리하죠! 설정을 변경할 때마다 이 작업을 다시 해야 한다는 점에 유의하십시오.
-
-
아직 만들지 않았다면 모드를 위한 게임 인스턴스 모듈을 만드십시오. 그리고 그곳의 Mod Configurations 아래에 구성을 지정하십시오. 방금 만들었다면 루트 모듈로 표시하는 것을 잊지 마십시오.
구성 미리보기
멋진 SML 메뉴 미리보기 위젯을 사용하여 게임에서 보이는 것처럼 모드 설정을 미리볼 수 있습니다!
콘텐츠 브라우저에서 SMLEditor Content/Menu Preview
로 이동하여 SML_MenuPreviewWidget을 우클릭한 다음,
"에디터 유틸리티 위젯 실행"을 선택하십시오. 창을 전체 화면으로 하는 것이 좋습니다.
미리보기에서 모드의 구성을 보려면, 콘텐츠 브라우저에서 ModConfiguration을 선택한 다음, 미리보기 창 안에서 Set Selected Mod Config 버튼을 누르십시오. 아래로 스크롤하여 설정 UI를 확인하십시오.
블루프린트에서 구성 시스템 사용하기
다음 이미지는 블루프린트에서 구성 시스템을 사용하는 방법을 보여줍니다.
아래는 위 이미지에 대한 텍스트 설명입니다.
구성에 대한 참조 만들기
구성과 상호작용하려면 먼저 참조를 만들어야 합니다:
-
블루프린트 안에서 'MC to ConfigProperty’라는 노드를 추가하고 입력 클래스를 구성의 클래스로 설정하십시오.
-
방금 만든 노드에서 출력 핀을 끌어와서 'BP_ConfigPropertySection’으로의 형변환 노드를 만드십시오.
속성에 대한 참조 만들기
구성의 속성에 대한 참조를 만들려면 ConfigPropertySection에 대한 참조가 필요합니다. 아직 하지 않았다면 위 섹션을 참고하십시오.
-
ConfigPropertySection에서 "To Section" 노드를 검색하십시오. 이 노드가 필요로 하는 문자열 입력은 가져오려는 속성의 키입니다.
값 가져오기
구성에서 속성의 값을 가져오려면 해당 속성에 대한 참조가 필요합니다. 아직 하지 않았다면 위 섹션을 참고하십시오.
-
"To Section" 노드의 출력 핀을 끌어와서 "CP to"를 검색하십시오. 이는 유형에 맞는 여러 "CP to " 노드를 나열할 것입니다. 값을 가져오려는 구성 속성의 유형을 선택하십시오. "CP to" 노드의 출력 핀이 구성 속성의 값을 제공합니다.
-
구성에 Config Section의 중첩 레이어가 있다면, 다른 'BP_ConfigPropertySection’으로의 형변환을 사용하고, 필요에 따라 계속해서 최종 값에 도달할 수 있습니다.
값 설정하기
구성에서 속성의 값을 설정하려면 해당 속성에 대한 참조가 필요합니다. 위의 "속성에 대한 참조 만들기" 섹션을 참고하십시오.
-
먼저 속성을 올바른 유형으로 형변환해야 합니다. "To Section" 노드 출력 핀을 끌어와서 "BP_ConfigProperty"를 검색하십시오. 이는 다양한 BP_ConfigProperty 클래스로의 형변환 노드를 나열할 것입니다. 값을 가져오려는 구성 속성의 유형을 선택하십시오.
-
형변환 출력 핀에서 "Set Value"를 검색하고 설정하려는 새 값을 할당하십시오.
C++에서 구성 시스템 사용하기
이 섹션은 SML 구성 시스템이 아직 개발 중일 때 작성되었습니다. 따라서 일부 내용이 오래되었으며, 여전히 작업 중입니다. 이 시스템을 사용하고 싶다면 이 대화를 참고하고 디스코드에서 도움을 요청하십시오. |
블루프린트로 설정을 구현하고 싶다면, SML 블루프린트 인터페이스가 제공하는 헬퍼 함수에 대해 읽어보고 ExampleMod를 확인하십시오. |
구성 관리자
구성 관리자는 게임에 로드된 모든 구성을 관리하는 게임 인스턴스 서브시스템입니다.
이는 등록된 구성을 로드하고 저장할 수 있습니다.
등록된 모드 구성은 더티로 표시될 수 있습니다. 이는 사용자가 구성 값을 변경했고 이러한 변경 사항을 저장해야 한다는 의미입니다.
구성을 로드할 때, 먼저 기본값을 기반으로 구성 값이 로드됩니다. 그런 다음, 또는 관리자가 지시받을 때, 구성 파일을 로드하고 파싱하여 이러한 구성 파일에 정의된 변경 사항을 로드된 구성 값에 적용합니다.
구성의 '스키마’와 '값’을 구분하는 것이 중요합니다. 스키마는 클래스나 구성이 어떻게 구조화되고 어떤 속성을 가지는지에 대한 선언처럼 작동합니다. 값은 기본적으로 스키마에 설명된 대로 구조화되어야 하는 실제 구성 값입니다.
ReloadModConfigurations(bool bSaveOnSchemaChange)
등록된 모든 모드 구성을 디스크에서 다시 로드합니다. 선택적으로 스키마 변경 사항을 저장합니다.
FillConfigurationStruct(FConfigId ConfigId, <struct>)
주어진 구성 id로 참조되는 활성 구성에서 얻은 데이터로 전달된 구조체를 채웁니다.
UModConfiguration
UModConfiguration
은 기본적으로 구성의 전체 스키마를 보유하는 객체입니다.
이는 디스크립터처럼 작동하므로, 구조는 클래스(즉, 기본 객체)에만 정의되면 되어 UClass를 전달하는 것만으로도 스키마(즉, 모드 구성)를 참조할 수 있습니다.
즉, 자신만의 구성 스키마를 정의하고 싶다면 이것을 기반으로 새 클래스를 만들어야 합니다. 그런 다음 기본값이나 생성자에서 변경 사항(스키마 자체와 추가 메타데이터 정의)을 적용합니다.
UConfigProperty
구성 속성은 기본적으로 특정 값을 설명하는 구성 스키마의 노드입니다.
이는 최종적으로 구성 값을 만드는 데 사용됩니다.
자식 클래스의 기본값도 인스턴스화 가능하므로 스키마를 더 정의할 수 있습니다.
구성 속성 자식 클래스들
UConfigProperty
를 상속하는 여러 클래스들이 있으며, 각각 특정 유형의 속성을 설명합니다.
다음과 같은 모든 주요 프리미티브에 대한 클래스가 있습니다:
-
bool
-
int
-
float
-
string
-
class
-
color
더 복잡한 구성 구조를 가능하게 하는 두 가지 특별한 클래스도 있습니다.
설정 값
각 UConfigProperty
에 대한 값이 있습니다.
이는 기본적으로 속성이 설명하는 값을 보유합니다.
실제 상태나… 파일/기본값에서 로드된 설정과 같은 것입니다.