Impostor
概述
主機端模式
拓撲。Fusion Impostor 展示了一個方法,說明如何開發一個最多達10位玩家的社交推斷遊戲的核心迴圈,以及如何整合及處理與附有一個Fusion專案的Photon Voice SDK的交流。如需更多關於Photon Voice的資訊,請參見操作手冊中的Voice頁面。
這個範例執行一個已連線的狀態機器,以輔助同步及遊戲狀態處理
這個範例的一些聚焦點有:
- 在遊戲前大廳及遊戲中的語音交流
- 完全已連線的遊戲狀態機器及系統,其中包含遊戲前、遊玩中、會議,以及遊戲後結果
- 共享的互動點,比如工作站及共同工作人員身體
- 客製化遊戲設定(冒名頂替者的數量、移動速度、玩家碰撞等等)
- 在比如門的世界中的物件的已同步狀態
- 在一個模組化的互動系統上組建的各種共同工作人員的工作
- 使用Photon Voice來提供處理各種語音交流類型
- 將房間設定為主機端,使用房間碼以讓客戶端加入
- 地區設定、暱稱,及麥克風選擇
技術資訊
- Unity 2021.3
在您開始之前
為了運行範例
- 在PhotonEngine 儀表板中建立一個Fusion應用程式帳號,並且將它貼上到即時設定(可從Fusion選單中到達)中的
App Id Fusion
欄位之中。 - 在PhotonEngine儀表板中建立一個Voice應用程式帳號,並且將它貼上到即時設定中的
App Id Voice
欄位之中 - 然後載入
Launch
場景並且按下Play
。
下載
版本 | 發佈日期 | 下載 | ||
---|---|---|---|---|
1.1.3 | Oct 21, 2022 | Fusion Impostor 1.1.3 Build 5 |
資料夾架構
主要指令碼資料夾/Scripts
有一個子資料夾名為Networking
,其包含範例中的主要網路執行方式,以及已連線的狀態機器。其他子資料夾,比如Player
及Managers
,分別含有針對遊戲遊玩行為及管理的邏輯。
玩家登錄
PlayerRegistry
儲存一個參照到房間中的各個玩家,並且針對在一位或多位玩家上選取以及執行動作,來提供公用程式方法。
遊戲狀態
遊戲邏輯的流程及行為由GameState
網路行為所控制。GameState
定義一個遊戲的階段的列舉,其中已連線StateMachine
屬性是作為其狀態。
StateMachine<T>
定義一個StateHooks
類別,其有3個欄位:onEnter
、onExit
,及onUpdate
。當使用狀態機器類別時,各個列舉狀態可能有StateHooks
,其定義在進入時及結束時發生什麼,同時積極地維持在狀態之中。
進入一個遊戲
使用者可以使用房間碼來加入或成為房間主機端。如果使用者選擇成為主機端,可選擇是否輸入一個房間碼。當在一個房間之中時,加入所需的房間碼將顯示於畫面的底端。
runner.SessionInfo.Name
來存取房間碼。NetworkStartBridge
作為一個中繼到NetworkDebugStart
。如果沒有指定一個特定碼,StartHost()
將從RoomCode
得到一個隨機4字元字串。
遊戲前
在遊戲前階段,玩家可以選擇從大廳區域的中心的桌面來設定它們的顏色,從設定來選擇他們偏好的麥克風裝置。主機端可以自訂遊戲設定並且負責開始遊戲。
處理輸入
在PlayerInputBehaviour.cs
指令碼中輪詢已連線輸入。也在這裡完成了輸入封鎖。此外,在執行輸入之前,在PlayerMovement.cs
中完成伺服器端檢查。
使用FixedInput.cs
類別來完成本機輸入輪詢。
鍵盤
- WASD以行走
- E以互動
- 鍵盤Enter以開始遊戲(只在遊戲前作為主機端時)
滑鼠
- 按一下左鍵以行走
- 按一下UI中的按鈕以互動
玩家
玩家的行為由三個不同的元件所定義:
PlayerObject
:持有一個參照到這個物件相關聯的PlayerRef
,並且含有在房間中的玩家的索引、它們的暱稱,及選取的顏色。PlayerObject
也是進入點以調用Rpc_Kill
方法。PlayerMovement
:負責玩家運動及輸入。它也持有遊戲遊玩——基礎資料及方法——特別是IsDead
、IsSuspect
,及EmergencyMeetingUses
屬性。PlayerData
:玩家的視覺效果元件。它主要處理材質,設定動畫屬性及具現化暱稱UI。
可互動物
- 顏色亭 :位於遊戲前房間的中心桌面。玩家可以從12個預設的顏色中選擇任意一個還沒有被另一位玩家選擇的顏色。
- 設定亭 :位於遊戲前房間的頂端,主機端可以選擇遊戲設定並且從這裡開始遊戲
- 緊急按鈕 :在每一回合可以按下有限次數的緊急按鈕,以召開一個會議
- 工作 :14個工作站,有5個獨特的工作迷你遊戲,其放置在地圖各個角落,讓共同工作人員來完成
- 屍體 :可以報告一個被謀殺的玩家的屍體,以由共同工作人員來免費召開一個會議,或是由冒名頂替者召開以試著掩飾他們的蹤跡
工作
工作站放置在地圖各個角落。當共同工作人員在它們的範圍之中時,可以與它們互動。
- 控溫器 (
TemperatureTask.cs
):按上或下箭頭來讓兩個數字相等 - 滑桿 (
SlidersTask.cs
):拖動各個滑桿以對齊紅色邊框。它們在正確定位時將鎖住。 - 圖樣配對 (
PatternMatchTask.cs
):右側面板的按鈕與左側面板的閃爍的燈光序列相配對。 - 數字序列 (
NumberSequenceTask.cs
):以遞增數字順序(1到10)來按下各個數字 - 下載檔案 (
DownloadTask.cs
):按下下載按鈕並且等待長條填滿以完成它。
語音
針對在Fusion Impostor中的Voice 2整合,使用兩個由Photon Voice 2提供的指令碼:
- Fusion語音網路 被新增到
PrototypeRunner
預製件。 - 語音網路物件 用於
Player
預製件,也有一個Speaker
作為給定的預製件的一個下層。