This document is about: FUSION 1
SWITCH TO

Fusion Golf

Level 4

概述

Fusion Golf 範例展示了一個方法,說明如何使用一個伺服器授權的客戶端已預測模型,來建立一個過關挑戰賽高爾夫競賽遊戲,並且專注於物理。它具有遊戲階段瀏覽器以及透過房間程式碼直接連線。主機可以修改各種遊戲設定,比如每洞最大時間、最大桿數,玩家是否將彼此碰撞,以及遊戲階段是否在遊戲階段瀏覽器中可見。範例有一個18洞球賽,其中有各種物理驅動的物件,比如大炮、旋轉器、加速隧道,以及電梯抬升平台。

在您開始之前

為了運行範例,首先在PhotonEngine儀表板中建立一個Fusion應用程式帳號,並且將它貼上到即時設定(可從Fusion選單中到達)中的App Id Fusion欄位之中。然後載入Scenes資料夾中的Menu場景並且按下Play

下載

版本 發佈日期 下載
1.1.6 Apr 12, 2023 Fusion Golf 1.1.6 Build 164

聚焦點

  • 完整已連線遊戲狀態系統(遊戲前、開頭介紹、遊玩、結尾,以及遊戲後)
  • 觀賞其他玩家
  • 客製化遊戲設定(碰撞、洞數、最大桿數、最大時間)
  • 在世界中的物件的已同步狀態
  • 大廳瀏覽器(以及讓房間成為私人房間的能力)
  • 專注於物理的物件(大炮、旋轉器、電梯抬升平台、加速隧道)
  • 客製化玩家視覺效果(RGB滑桿)
  • 區域設定、暱稱設定、圖形選項

專案

資料夾架構

主要指令碼資料夾/Scripts有一個子資料夾Networking,其含有指令碼,其主要功能是與Fusion相互聯繫。
值得注意的指令碼有:

玩家登錄

玩家登錄儲存一個參照到房間中的各個玩家,並且針對在一位或多位玩家上計數、選取,以及執行動作,來提供公用程式方法。公用程式功能的預設行為是,忽略身為觀眾的玩家,但是如果includeSpectators參數為真,將在玩家的完整集合上進行操作。

觀眾

觀眾是指已經明確選擇觀賞而不參與遊戲的玩家。一位觀眾的PlayerObject將永遠不會有一個被指派的Controller

遊戲狀態

遊戲邏輯的流程及行為由GameState網路行為所控制。GameState定義一個遊戲的階段的列舉,其中已連線StateMachine屬性是作為其狀態。
StateMachine<T>定義一個StateHooks類別,其有3個欄位:onEnteronExit,及onUpdate。當使用StateMachine類別時,各個列舉狀態可能有StateHooks,其定義在進入時及結束時發生什麼,同時積極地維持在狀態之中。

進入一個遊戲

使用者可以成為主機端,或是使用遊戲階段瀏覽器或直接透過遊戲階段碼來加入一個遊戲階段。如果使用者選擇成為主機端,可選擇是否輸入一個遊戲階段碼,如果留白,它將自動被生成。當在一個遊戲階段之中時,遊戲階段碼將顯示於畫面的頂端。

遊戲階段碼可以透過這個來存取:runner.SessionInfo.Name

地區選擇

在選擇成為主機端或加入之前,使用者將看見一個下拉式選單,以選擇使用哪一個Photon Cloud地區。已經根據地區文檔來選擇了下拉式選單的選項。

對戰配對器

成為主機端、加入,以及遊戲階段瀏覽器全部都是由Matchmaker類別所處理。它作為NetworkRunner.StartGame方法的包裝函式,並且在連線錯誤的情形,將錯誤轉傳到DisconnectUI以向使用者顯示。

處理輸入

輸入由PlayerInputBehaviour.cs輪詢到自訂INetworkInput架構PlayerInput之中。在這個範例中的輸入只包含按一下及移動滑鼠。
PlayerInput相對較為簡單,並且只含有3個欄位:

  • isDragging - 玩家是否按住滑鼠按鈕
  • dragDelta - 玩家的滑鼠被向下拖動了多少
  • yaw - 玩家正在面對的Angle
    這個資料由Putter玩家指令碼來處理,並且輔助推桿及本機玩家及觀眾都可以看見適當的UI。

玩家

玩家由2個部分處理:

  • PlayerObject - 含有這個物件相關聯的PlayerRef值,一個參照到玩家的控制器(Putter),房間中的索引,暱稱,選取的顏色,以及與得分有關的遊戲遊玩資料
  • Putter - 負責針對物理及UI來回應輸入

第三方資產

高爾夫範例包含幾個由各自的創造者所提供的資產。您可以在它們各自的網站針對您自己的專案來獲取完整的套件:

重要事項:為了在商業專案中使用它們,需要從各自的創造者來購買一個許可授權。

Back to top