모드 서브시스템
SML이 기본적으로 제공하는 서브시스템을 찾고 계신다면, 레지스트리 페이지를 확인하십시오. |
서브시스템은 월드에 단 한 번만 존재하는 액터입니다 (싱글톤 패턴과 비슷하지만 완전히 같지는 않음). 이러한 서브시스템은 월드 컨텍스트를 사용할 수 있는 곳이라면 어디서든(예: 액터) 접근할 수 있습니다.
서브시스템을 사용하면 맞춤 게임 상태 정보를 구현할 수 있습니다. 예를 들어 저장 파일에 저장하고 싶은 정보나, 여러 액터를 관리하거나 시스템을 중앙에서 관리하고 싶을 때 사용할 수 있습니다.
예를 들어, Light It Up 모드는 서브시스템을 사용하여 조명 그룹 시스템을 만듭니다. 이 시스템을 통해 각 조명은 현재 그룹 설정에 대한 정보를 각 조명 인스턴스에 다시 저장하지 않고도 얻을 수 있습니다.
서브시스템은 복제 정책 설정에 따라 멀티플레이 게임에서 호스트, 클라이언트 또는 양쪽 모두에 존재할 수 있으며, 복제될 수도 있습니다.
모드 서브시스템 정의하기
새로운 모드 서브시스템을 정의하려면 AModSubsystem
을 상속받는 새 클래스를 만드십시오.
C++에서 서브시스템을 구현하고 BeginPlay나 EndPlay를 오버라이드할 경우, 반드시 부모 함수를 호출해야 합니다. 그렇지 않으면 서브시스템이 제대로 처리되지 않습니다! |
복제 정책
서브시스템의 복제 정책은 멀티플레이에서 서브시스템이 어느 쪽에 존재할지, 그리고 서버와 클라이언트 간에 데이터가 공유될지를 결정합니다.
서브시스템은 기본적으로 SpawnOnServer
복제 정책을 가지며,
이는 클라이언트에는 서브시스템 인스턴스가 없다는 의미입니다.
만약 이것이 원하는 동작이 아니라면,
아래 표를 참고하여 필요에 맞는 복제 정책을 찾아
클래스 기본값(블루프린트) 또는 생성자(C++)에서 변경하십시오.
싱글플레이에서 존재 | 호스트 및 플레이 호스트에서 존재 | 전용 서버에서 존재 | 멀티플레이 클라이언트에서 존재 | |
---|---|---|---|---|
|
✔ |
✔ |
✔ |
✘ |
|
✔ |
✔ |
✔ |
✔ |
|
✔ |
✔ |
✘ |
✔ |
|
✔ |
✔ |
✔ |
✔ |
호스트와 클라이언트 인스턴스 간 데이터 공유 여부 | |
---|---|
|
✘ - 클라이언트 측이 없어서 공유할 수 없음 |
|
✔ - 서버가 액터의 네트워크 소유권을 가지고 클라이언트에 복제 |
|
✘ - 전용 서버의 경우 서버 측이 없거나(전용 서버) 서버와 클라이언트 측이 통신하지 않음(호스트 및 플레이) |
|
✘ - 서버와 클라이언트 측이 통신하지 않음 |
서브시스템 등록하기
서브시스템을 등록하려면 게임 월드 모듈의
Mod Subsystems
배열에 추가하십시오.
서브시스템 참조하기
서브시스템 자체는 ModSubsystem
을 상속받는 액터입니다.
서브시스템을 사용하여 상태를 저장할 수도 있습니다.
서브시스템은 GetSubsystemActorManager
함수를 사용하여 얻을 수 있는 SubsystemActorManager
가 관리합니다.
매니저의 GetSubsystemActor
함수를 사용하여 서브시스템에 대한 참조를 얻을 수 있습니다.
-
첫 번째 매개변수는
GetSubsystemActorManager
함수를 사용하여 얻은SubsystemActorManager
에 대한 참조입니다. -
두 번째 매개변수는 가져올 서브시스템 액터의 클래스입니다.
서브시스템을 사용하기 전에 유효한지 확인하는 것이 좋습니다.