Impostor
개요
Fusion Impostor는 최대 10명의 플레이어를 위한 소셜 디덕션 게임의 코어 루프를 개발하는 방법과 Photon Voice SDK와의 통신을 Fusion 프로젝트에 통합하고 처리하는 방법을 보여줍니다.
이 샘플은 네트워크 상태 머신을 구현하여 게임 상태의 동기화 및 처리를 용이하게 합니다.
HostMode
토폴로지를 사용한 샘플입니다.이 샘플의 주요 내용은 다음과 같습니다.
- 게임 전 로비 및 게임 내 음성 커뮤니케이션을 수행합니다.
- 사전 게임, 플레이, 회의 및 사후 게임 결과를 포함하는 완전히 네트워크화된 게임 상태 머신 및 시스템입니다.
- 작업 스테이션 및 동료 시체와 같은 공유 상호 작용 지점.
- 게임 설정(사칭자 수, 이동 속도, 플레이어 충돌 등)을 사용자 지정.
- 문과 같은 세계의 객체의 동기화된 상태.
- 모듈식 상호 작용 시스템을 기반으로 한 다양한 동료 작업.
- Photon Voice를 사용하여 다양한 음성 통신 유형을 처리.
- 클라이언트가 가입할 코드를 사용하여 룸을 호스트로 설정.
- 지역 설정, 닉네임 및 마이크 선택.
기술 정보
- 유니티 2021.3
시작하기 전에
샘플을 실행하려면 먼저 Photon Engine 관리 화면에서 Fusion AppId를 생성하고 이를 Real Time 설정(Fusion 메뉴에서 접근 가능)의 App Id Fusion
필드에 붙여 넣으십시오. 그런 다음 Launch
씬을 로드하고 Play
를 누릅니다.
다운로드
버전 | 릴리즈 일자 | 다운로드 | ||
---|---|---|---|---|
1.1.3 | Oct 21, 2022 | Fusion Impostor 1.1.3 Build 5 |
폴더 구조
메인 스크립트 폴더 /Scripts
에는 샘플의 주요 네트워킹 구현과 네트워크 상태 시스템을 포함하는 Networking
이라는 하위 폴더가 있습니다. Player
및 Managers
와 같은 다른 하위 폴더에는 각각 게임 플레이 행동과 관리에 대한 로직이 포함되어 있습니다. VoiceFusionIntegration
폴더에는 /Assets/Photon/PhotonVoice
에서 찾을 수 있는 Photon Voice 패키지에 후크 하는 스크립트가 포함되어 있습니다.
PlayerRegistry
PlayerRegistry
는 룸에 있는 각 플레이어에 대한 참조를 저장하고 한 명 이상의 플레이어를 선택하여 작업을 수행하는 유틸리티 메소드를 제공합니다.
GameState
게임 로직의 흐름과 동작은 GameState
NetworkBehaviour에 의해 제어됩니다. GameState
는 네트워크로 연결된 StateMachine
이 자신의 상태로 사용하는 게임의 단계에 대한 열거를 정의합니다.
StateMachine<T>
는 onEnter
, onExit
, 그리고 onUpdate
의 세 가지 필드로 StateHooks
클래스를 정의합니다. StateMachine 클래스를 사용할 때 각 enum 상태에는 입력, 종료 시 및 상태에 있는 동안 발생하는 작업을 정의하는 StateHooks
가 있을 수 있습니다.
게임으로 들어가기
사용자는 룸 코드를 사용하여 룸에 가입하거나 룸을 호스트 할 수 있습니다. 사용자가 호스트하도록 선택한 경우 룸 코드 입력은 선택사항입니다. 룸에 들어가면 가입할 코드가 화면 하단에 표시됩니다.
runner.SessionInfo.Name
.NetworkStartBridge
는 NetworkDebugStart
의 중재자의 역할을 합니다. 특정 코드가 지정되지 않은 경우 StartHost()
는 RoomCode
에서 임의의 4개의 문자열을 가져옵니다.
게임 전 단계
게임 전 단계에서 플레이어는 로비 영역의 중앙에 있는 테이블에서 색상을 설정하고 설정에서 원하는 마이크 장치를 선택할 수 있습니다. 호스트는 게임 설정을 사용자 지정할 수 있으며 게임을 시작할 책임이 있습니다.
입력 처리
네트워크 입력은 PlayerInputBehaviour.cs
스크립트에서 폴링 됩니다. 입력 차단이 이루어지는 곳이기도 합니다. 또한 입력을 수행하기 전에 PlayerMovement.cs
에서 서버 측 검사를 수행합니다.
로컬 입력 폴링은 FixedInput.cs
클래스를 사용하여 수행됩니다.
키보드
- WASD를 사용하여 걷기
- E 상호작용
- 엔터키로 게임 시작 (호스트로서, 게임 전에서만)
마우스
- 왼쪽 클릭하여 걷기
- UI의 버튼을 클릭하여 상호작용
플레이어
플레이어의 행동은 3가지의 다른 컴포넌트로 정의되어 있습니다:
PlayerObject
: 이 객체와 연관된PlayerRef
에 대한 참조가 들어 있으며, 룸에 있는 플레이어의 인덱스, 닉네임 및 선택한 색상이 포함되어 있습니다.PlayerObject
는Rpc_Kill
메소드를 호출하는 진입점 이기도 합니다.PlayerMovement
: 플레이어 이동과 입력을 책임집니다. 또한 게임플레이에 필수적인 데이터와 방법, 특히IsDead
,IsSuspect
, 그리고EmergencyMeetingUses
속성을 보유하고 있습니다.PlayerData
: 플레이어의 시각적 컴포넌트입니다. 주로 머터리얼을 처리하고 애니메이터 속성을 설정하고 닉네임 UI를 인스턴스화합니다.
상호작용
- 색상 키오스크 : 게임 이전 룸의 중앙 테이블에 있습니다. 플레이어는 다른 플레이어가 찍은 적이 없는 12가지 사전 설정 색상 중 하나를 선택할 수 있습니다.
- 키오슼 설정 : 게임 이전 룸의 맨 위에 위치한 호스트에서는 게임 설정을 선택하고 게임을 시작할 수 있습니다.
- 비상 버튼 : 비상 버튼을 라운드당 제한된 시간 동안 눌러 회의를 소집할 수 있습니다.
- 임무 : 5개의 고유한 임무 미니 게임을 특징으로 하는 14개의 임무 스테이션이 동료들이 완료할 수 있도록 맵 전체에 배치되어 있습니다.
- 시체 : 살해된 플레이어의 시신은 그들의 흔적을 감추려고 애쓰는 동료나 임포스터들에 의해 무료로 회의를 소집하는 것으로 보고될 수 있습니다.
임무
임무 스테이션은 지도에서 찾을 수 있습니다. 동료들은 그들이 범위 내에 있을 때 동료들과 상호작용할 수 있습니다.
- 온도조절 (
TemperatureTask.cs
) : 위쪽 및 아래쪽 화살표를 눌러 두 숫자를 동일하게 만드십시오. - 슬라이더 (
SlidersTask.cs
) : 각 슬라이더를 끌어 빨간색 윤곽선과 정렬합니다. 올바른 위치에 놓으면 잠깁니다. - 패턴 맞추기 (
PatternMatchTask.cs
) : 오른쪽 패널의 버튼을 누르면 왼쪽 패널에 깜박이는 조명의 순서가 일치합니다. - 연속 숫자 (
NumberSequenceTask.cs
) : 각 숫자를 오름차순 숫자(1-10)로 누릅니다. - 파일 다운로드 (
DownloadTask.cs
) : 다운로드 버튼을 누르고 바가 채워질 때까지 기다립니다.
Voice
Fusion Impostor에서 Voice 2 통합의 경우 Photon Voice 2에서 제공하는 두 가지 스크립트가 사용됩니다:
PrototypeRunner
프리팹에 FusionVoiceNetwork가 추가되었습니다.- VoiceNetworkObject는
Player
프리팹에서 사용되며,Speaker
도 주어진 프리팹의 자식으로 사용됩니다.