멀티플레이어 이해하기

멀티플레이어 경험에는 고려해야 할 몇 가지 사항이 있습니다.

멀티플레이어 경험은 오브젝트와 환경의 ‘위치’ 또는 ‘상태’를 제어하고 변경하는 비헤이비어(Behaviour)와 컴포넌트(Component)에 대한 동기화 기능을 향상시킵니다.

즉, 오브젝트가 움직이거나 환경 변화가 발생할 때 모든 플레이어가 동시에 그러한 변화를 확인할 수 있습니다.

Door(문) 비헤이비어가 가장 좋은 예시입니다.

모든 플레이어가 이 행동이 포함된 액터를 트리거할 수 있으며 충돌 또한 모든 플레이어에 의해 변경됩니다. 문이 열리거나 닫히는 상황은 모든 플레이어에게 동일하기 때문입니다.

다른 예시로는 Basic Platform(기본 플랫폼) 비헤이비어가 있습니다.

이 행동이 포함된 액터가 한 장소에서 다른 곳으로 이동할 때, 이 이동은 모든 플레이어와 동기화됩니다.

모든 플레이어에게 동기화되는 움직이는 플랫폼 또는 문 사용은 도전 과제를 설정하고 경험 내 다양한 지역을 향한 접근성을 제공하는 좋은 방법입니다.

싱글플레이어 vs. 멀티플레이어

멀티플레이어 기능은 경험 제작에 있어 가장 흥미로운 부분이나, 한층 복잡한 작업이기도 합니다.

참여자가 더 많아지는 즉시 플레이어가 상호작용하는 방식, 이러한 상호작용이 트리거하는 항목 및 해당 상호작용의 결과를 확인할 수 있는 사람을 결정할 때 고려해야 할 추가 ‘계층’이 도입됩니다.

이는 ‘동기화된’ 행동과 컴포넌트가 ‘동기화되지 않은’ 비헤이비어 및 컴포넌트와는 메시지를 주고받을 수 없기 때문입니다.

모든 행동, 컴포넌트, 툴에 동기화 기능이 있는 것은 아닙니다.

예를 들어, Rules 탭에서 생성된 퀘스트는 동기화되지 않으며 ‘Client Only(클라이언트 전용)’ 메시지로만 트리거될 수 있고 개별 플레이어들이 ‘로컬’로 완료할 수 있습니다.

이 문제를 해결하기 위해 이번 0.8 업데이트에서는 비헤이비어와 컴포넌트를 Client Only [SP]Synchronized [MP]로 구분했습니다.

Client Only [SP] 비헤이비어와 컴포넌트는 ‘로컬’ 환경에서 작동합니다. 즉, 이들이 주고받는 메시지는 다른 ‘로컬’ 행동 및 컴포넌트에서만 수신 또는 전송됩니다. 퀘스트 진행 등의 이러한 메시지 및 변경 사항은 멀티플레이어 경험에서도 개별 플레이어에게만 발생합니다.

Synchronized [MP] 비헤이비어와 컴포넌트는 ‘글로벌’ 환경에서 작동합니다. 즉, 액터 간 교환하는 메시지는 모든 플레이어에게 발생하며, 모든 플레이어는 이러한 메시지들의 결과로 발생하는 상태의 변경 사항을 확인할 수 있습니다.

Collectable(수집) 컴포넌트를 예시로 살펴보겠습니다.

이 컴포넌트는 ‘Client Only(클라이언트 전용)’ 또는 ‘Synchronized(동기화)’ 둘 중 한 가지를 선택할 수 있습니다.

[SP] Collectible이 추가된 오브젝트가 수집될 경우 개별 플레이어가 플레이하고 있는 경험에서는 사라지지만, 다른 플레이어가 플레이하는 경험 속에서는 존재합니다. 이는 액터들의 ‘상태’ 변경이 개별 플레이어에게만 발생하기 때문입니다.

[MP] Collectible이 추가된 오브젝트가 수집될 경우 오직 한 명의 플레이어만 해당 오브젝트를 수집할 수 있으며 이외 경험 내 나머지 모든 플레이어에게서 해당 오브젝트가 사라지게 됩니다. 이는 '액터들'의 상태 변경이 모든 플레이어에게 발생하기 때문입니다.

비헤이비어&컴포넌트 목록

[SP]/[MP] 구분으로 비헤이비어 또는 컴포넌트 적용 시 고려해야 할 옵션이 거의 두 배로 늘어 어려움을 겪게 될지도 모릅니다.

아래의 차트를 통해 어떤 항목이 변경되었고 어디에 사용할 수 있는지 살펴보세요.

위 표에서 회색으로 표시된 기존 비헤이비어와 컴포넌트는 멀티플레이어 경험과 호환되지 않으므로, 멀티플레이어 경험에서 사용하면 안 됩니다.

멀티플레이어 경험에서 포팅되지 않은 ‘Client Only’ 비헤이비어와 컴포넌트를 사용하면 플레이어간 동기화가 제대로 이루어지지 않을 수 있습니다.

일부 항목은 ‘Synchronized’이지만 ‘Client Only’가 아님을 알 수 있습니다.

이러한 비헤이비어와 컴포넌트는 싱글플레이어 경험에서 사용할 수 없다는 의미가 아닌 개별 플레이어가 더 이상 고유하게 경험할 수 있는 버전이 없음을 의미합니다.

예를 들어, Basic Platform은 ‘Client Only’로 사용할 수 없으며 비헤이비어 창의 ‘Synchronized’ 필터를 통해서만 액세스할 수 있습니다. 여전히 싱글플레이어 경험에서 사용할 수 있지만, 다른 모든 플레이어가 이동 및 충돌을 사용할 수 있어야만 멀티플레이어 경험에서도 사용할 수 있습니다.

일반적인 지침으로 멀티플레이어 경험에서 구현할 수 있는 ‘Client Only’의 사용 사례는 다음과 같습니다.

Asker 행동과의 대화, SpeakerIndicator 컴포넌트 알림, Animated Decoration 비헤이비어를 사용하는 작업에 대한 응답 및 Message Broadcaster 등의 행동에 의해 활성화되는 퀘스트 목표

[SP]/[MP] 비헤이비어 및 컴포넌트 선택하기

비헤이비어 또는 컴포넌트를 적용하기 위해 먼저 액터를 선택하고 속성 패널에서 비헤이비어 또는 컴포넌트를 클릭합니다.

팝업창이 나타나면 기본 보기에 먼저 ‘Client Only’ 변수가 표시되며, 이는 녹색 텍스트와 [SP] 접두사로 구분할 수 있습니다.

회색 텍스트로 표시된 비헤이비어와 컴포넌트는 기본 보기에 표시되지만 멀티플레이어 경험과 호환되지 않으므로 싱글플레이어 경험에서만 사용해야 합니다.

Synchronized’ 버전의 비헤이비어 및 컴포넌트에 액세스하려면 팝업창 우측 상단 구석의 ‘Type’ 메뉴의 드롭다운을 클릭하고 ‘Synchronized’ 옵션을 선택합니다. 그러면 [MP] 접두사가 붙은 노란색 텍스트로 표시된 항목들을 확인할 수 있습니다.

필요한 버전을 찾은 경우 해당 항목을 클릭하면 그 항목이 선택한 액터에 추가됩니다.

향후 업데이트에서 모든 항목이 멀티플레이어로 호환되면 [MP] 및 [SP] 비헤이비어 및 컴포넌트를 식별하는 데 사용되는 텍스트 색상은 제거될 예정입니다.

오브젝트가 ‘Client Only’인지 ‘Synchronized’인지 장면에 표시되는 시각적인 표시기는 없습니다.

짚고 넘어가야 할 또다른 중요한 점은 바로 비헤이비어와 컴포넌트의 [MP]/[SP] 변수는 동일한 액터에 존재할 수 없다는 사실입니다. 즉, [MP] Asker 비헤이비어가 추가된 엔티티에는 [SP] Indicator 컴포넌트를 추가할 수 없습니다.

대체 네트워크에서 비헤이비어 또는 컴포넌트를 선택할 시 다음 메시지가 표시됩니다.

"BLOCKED BY Network policy incompatible with another behaviour/component assigned to the actor/s (해당 액터에 할당된 다른 비헤이비어/컴포넌트와 호환되지 않는 네트워크 정책에 의해 차단됨). "

이는 각 버전이 ‘클라이언트’ 환경 또는 ‘동기화된’ 환경과 상호 작용하도록 설계되었으며 둘을 모두 사용 시 충돌이 발생할 수 있기 때문입니다.

멀티플레이어 일관성

잠재적인 오류와 비일관성을 줄이기 위해 액터의 ‘Type’이 일관적인지 확인해야 합니다.

즉, 단일 액터에 추가된 모든 컴포넌트와 비헤이비어는 ‘Client Only’이거나 ‘Synchronized’로 통일되어야 함을 말합니다.

1️⃣ 통일된 유형

특정 ‘Type’의 비헤이비어 및 컴포넌트가 단일 액터에 추가된 경우, 게임 메이커는 크리에이터가 비헤이비어 및 컴포넌트 창에서 다른 ‘Type’을 클릭할 수 없도록 하여 충돌 설정에 대한 액세스를 자동으로 제한합니다.

2️⃣ 통일된 메시지

액터의 커뮤니케이션 또한 일관성을 유지하는 것이 중요합니다. ‘Client Only’로 설정된 액터는 ‘Synchronized’ 액터로 메시지를 전송할 수 없으며, 그 반대의 경우도 동일합니다.

3️⃣ 통일된 위계

액터의 부모 자식 관계 또한 일관성을 유지해야 합니다. ‘Client Only’로 설정된 액터는 ‘Synchronized’로 설정된 액터의 자식이나 부모 관계가 될 수 없으며, 그 반대의 경우도 동일합니다.

4️⃣ 통일된 생성

Asset Spawner 비헤이비어, Replace Asset 비헤이비어, 또는 Drop 컴포넌트를 통해 경험 중 ‘생성된’ 액터는 ‘Spawner(생성기)’와 동일한 ‘Type’을 유지해야 합니다.

‘Synchronized’ 비헤이비어는 ‘Client Only’ 액터에 의해 생성될 수 없으며, 그 반대의 경우도 동일합니다.

Last updated