本文翻譯自 From Development to Release: Nthusia’s Final Dev Diary 2025年3月14日
歡迎來到與 Team Nthusia 一起的 Dev Diaries 的最後一篇!在這篇博客中,我們將分享使用 Photon 的經驗以及在開發過程中所學到的知識。我們在第一部分和第二部分中已經涵蓋了許多步驟,現在我們正準備在推出這個範例之前,完成最後的工作。
我們將討論轉換為基於物品的貨幣系統後,如何改善背包管理,並且像其他物品一樣讓金錢變得更容易掉落和共享。此外,我們還改善了對話系統的實現,使設定更加簡單,而不需要進行硬編碼。我們還將討論增強控制器支援、在發布前整理專案,以及有效文檔化的重要性。
就這樣,我們的 Team Nthusia 之旅也要告一段落了。希望這些心得能對其他開發者在製作多人遊戲時有所幫助。那我們就開始吧!
背包管理與改善
在這類遊戲中,分享物品和貨幣應該要盡可能簡單。在共享世界的模擬中,交易和贈禮是必不可少的。想像一下與朋友交換南瓜,或者把硬幣送給鄰居的情景。這樣的體驗能讓遊戲的樂趣和沉浸感大大提升。
在將錢添加為貨幣後,把它視為物品是很有意義的。這樣一來,玩家就可以像分享其他物品一樣分享金錢。由於已經有用於放置和共享物品的系統,因此轉換起來非常簡單。這樣不僅幫助 Nthusia 避免建立單獨的資金處理系統,還簡化了整個流程。
隨著轉換為基於物品的貨幣,玩家現在可以一次性添加或移除多個物品。為了支持這個功能,Nthusia 考慮到了背包槽位和堆疊容量。通過引入中間裝備類別,裝備處理變得更高效。相較於直接實現抽象屬性,我們使用了型別泛型來隱式地實現。
這進一步簡化了引入新裝備的流程:
對使用者友好的對話實作
現在你可以和朋友交換物品,即使沒有玩家在裡面,這個世界也會感覺變得更加生動。由於有各式各樣的角色,這個世界變得更加活潑,而 NPC(非玩家角色)在創造這種氛圍中扮演著重要的角色。
首先,對話功能需要在 NPC 類別中實現。DialogueHandler 組件必須接收對話輸入,以便正常運作。這些輸入可以在檢查器中與適當的回應選項一起添加。
以前,所有對話都必須以硬編碼的方式來建立完善的系統。不過現在,對話已經結構化,讓程式碼只需要處理回應的動作,其餘部分則可以在檢查器中輕鬆管理。
- Dialogue: 將說話者的姓名和所有對話內容儲存在陣列中(DialogueBlock[])
- DialogueBlock:儲存單一對話「頁面」及使用者可能做出的任何對話選項(DialogueOption[])
- DialogueOption:代表使用者根據對話所做的選擇。儲存將在 UI 上顯示的文字以及選擇時要呼叫的委託。
-
DialogueState:DialogueHandler 的內部記憶體,用來儲存當前進行中的對話、對話結束時需要採取的動作(雖然在範例中未使用,但通常很有幫助),還有用來追蹤對話進度和時間的變數,包括 blockIndex、isLineEnded 和 timer,表示開始顯示目前對話方塊時的遊戲時間。
所有上述的實現選項都是與相應的可序列化對話的「運行時」表示。為了在檢查器中設定對話,使用者需要定義一個 DialogueObject 的欄位或屬性。接著,通過呼叫 GetDialogue(),可以讓 DialogueObject 建構一個可供使用的運行時版本。
控制器支援
為了讓遊戲範例更易於接觸,Nthusia 增加了對控制器的支援。像 Fusion Karts 和 Food Fusion 一樣,控制器非常適合與類比搖桿的玩法相結合。
支援的添加過程簡單又容易,只需在 Unity 的 Input Manager 中擴展和調整基本輸入,即可輕鬆使用。
要進入設置,只需選擇Edit > Project Settings > Input Manager.
以下是遊戲中將按鍵或搖桿按鈕分配給動作的範例。指定的名稱為「Inventory」,主按鈕是「q」,替代按鈕則是joystick button 3。
以下的圖片顯示「joystick button 3」在 Xbox 控制器上對應的是 Y 按鈕。在使用基本的 Unity 輸入系統設置控制時,這些參考圖片非常有用!
Source: For Life Games
https://discussions.unity.com/t/xbox-one-controller-mapping-solved/187077
範例中需要注意的一點:控制器的實現非常適合核心遊戲循環,例如走動和與物品互動。而庫存和玩家自訂的畫面則是針對滑鼠和鍵盤進行了最佳化。
在範例提供的 InputBehaviour.cs 類別中,上述的輸入是透過字串引用來實現的。因此,當按下 q 鍵或joystick button 3時,就會觸發庫存操作。
完成範例並發布
所有準備都完成了,現在是時候來收尾範例並進行發布前的調整。在完成之前,Nthusia 會徹底檢查專案,整理未使用的程式碼,刪除不必要的資產,並整理剩下的工作和進行最終測試。同時,也會確認核心功能是否有良好的文檔記錄。
藝術資產的完善包括模型、紋理和動畫,其中一些可能是佔位符或仍在增進中。擁有完整的文件(包括程式碼和文檔)對使用者和我們的工程師來說,有助於維護這個範例。
請放心——Nthusia 與我們的開發人員保持著持續的溝通,以確保一切都按預期進行。錯誤、不清晰的文檔以及混亂的程式碼是例外,而非常態。
發布前的另一個關鍵步驟是在不同平台上進行測試。在廣泛發佈之前,必須考慮每個平台的期望與要求。僅僅因為它在編輯器中運行並不意味著它在建置中會有效果。
常見的問題包括多執行緒和某些著色器技術,因為這些技術在不同平台的支援上有差異。一旦一切都清理完畢並經過測試,專案就會交給我們來處理。
樣本的發布完全由我們負責,但我們始終會與開發人員合作,以確保滿足所有要求,從而保證最佳的品質。
來自 Nthusia 的建議與小貼士
最後,我們想給 Nthusia 一個機會,讓任何有興趣開發遊戲範本或建立合作關係的人分享他們的建議。
「無論您的技術水平或熟悉程度如何,文檔永遠是您的好幫手!在開發範例時,我們經常打開 Fusion 的文檔,根據需要參考手冊。
在這個範例中,我們對 NetworkTRSP 進行了自訂實現,但可供參考的文檔並不多。不過,我們並不害怕深入研究程式碼,找到了一些可以利用的基本方法,例如靜態的 NetworkTRSP 方法 Teleport 和 Render,這些方法為我們提供了預設實作。一旦找到了,剩下的實作就變得順利了,因為對於我們的用例來說,所有繁重的行動邏輯都是由 NavMesh.SamplePosition 提供的。
因此,我們想要告訴大家:不要限制自己,也不要試圖重新發明輪子。您想要建立或嘗試的大部分內容早已有了。您只需要將這些點連起來,並保持開放的心態。Photon 的文檔經歷多年製作,包含了 100 多個樣本。因此,找到方法推進或解決問題只是時間和耐心的問題。」
感謝所有關注本開發日誌的人!我們希望您能發現一些有價值的內容。如果您想了解更多有關 Nthusia 的資訊,以及我們如何支援多人遊戲開發者,歡迎加入我們的 Discord 或直接聯繫我們。
準備好建立自己的成功多人遊戲了嗎?
透過 Photon 的 Fusion 和 Quantum 將尖端的多人遊戲功能整合到您的專案中從未如此簡單。我們提供業界最先進的工具、全面的支援以及您入門所需的一切——從可下載的範例到詳細的文件。
今天就踏出第一步——下載 Fusion & Quantum 並開始建置。如果您正在尋求深入的幫助,請加入我們的 Gaming Circle,您可以直接與我們的開發人員聯繫,並在整個旅程中獲得專家指導。
您的多人遊戲成功故事就從這裡開始!
歡迎來加入我們的 Discord、YouTube、BlueSky、X 和 LinkedIn!我們非常期待看到你們的創作!
評論
0 條評論
請登入寫評論。