前言
相信許多開發遊戲的小夥伴對於製作多人遊戲充滿興趣,但往往被複雜的網路技術所困擾,但其實有了合適的工具與框架,這些挑戰都能迎刃而解。本篇文章將帶你了解如何使用 Photon 來協助開發多人遊戲,幫助你輕鬆跨越技術門檻,實現即時互動的遊戲體驗,文中不僅提供詳細的【使用教學】,還附上實用的【補充說明】,希望能幫助大家更好地掌握這個工具,提升開發過程中的創意與效率,也歡迎大家支持原文作者!
插件介紹
Photon 是一款強大的跨平台網路解決方案,適用於多人遊戲、聊天室和其他需要即時互動的應用。它由兩部分組成:Socket 伺服器和針對各平台編寫的 SDK。Photon 支援多種平台,並提供 Unity 遊戲開發專用的 Photon Unity Networking (PUN) SDK,讓開發者能輕鬆實現網路連線、資料同步及玩家匹配等功能。
功能特色
- 高效能 Socket 伺服器:Photon 提供高效的 Socket 伺服器,能夠處理大量的同時連線,適用於即時性要求高的【多人遊戲】。
- 跨平台支援:Photon 支援多種平台,包括 【Windows】、【Unity】、【iOS】、【Android】、【HTML5】、【Flash】 等,方便開發者一次編寫、多平台發布。
- 可擴展性:Photon 的架構設計具備高可擴展性,無論是【小型遊戲】還是【大型多人遊戲】,都能輕鬆應對。
- 便捷的匹配系統:內建的匹配系統幫助玩家快速找到對手或隊友,支持【創建房間】、【加入隨機房間】等操作,節省開發時間。
- 多種網路拓撲:支援房間伺服器模式、主從伺服器模式等多種網路拓撲結構,能靈活滿足不同遊戲的需求。
- SDK 支援:Photon 為不同平台提供對應的 SDK,如 【Photon Unity Networking (PUN)】,讓開發者能快速集成網路功能。
適用場景
- 即時對戰遊戲:適用於 【FPS】、【MOBA】、競速等需要即時互動和快速反應的遊戲類型,Photon 的高效能伺服器能確保即時資料同步。
- 合作冒險與生存遊戲:例如【合作闖關】、【沙盒世界】類的遊戲,Photon 能輕鬆實現多名玩家在同一遊戲世界中的互動。
- 休閒遊戲與社交遊戲:例如【棋牌】、【猜謎】類的遊戲,Photon 內建的匹配功能適合這類遊戲快速找尋對手。
- 大廳系統與聊天室:Photon 可用於設置【遊戲大廳】、【聊天室】等,即時訊息的傳遞、房間管理及玩家匹配都能輕鬆實現。
- 多人VR/AR 體驗:適合用於多人 【VR】或【AR】 應用的同步互動,提供即時連線能力,使多人可以共同參與虛擬場景。
建立 PUN 雲端伺服器
先在 photon 網站內註冊帳號,再建立一個雲端伺服器,如下:
說明:免費版 PUN 雲端伺服器最多支援 20 個玩家同時在線上。
下載 PUN 2
到 unity 資源商城下載 PUN 2 資源包。
將資源分別導入到 Unity 專案
為了示範這裡我用 unity 自備的學習範本建立專案。
將 PUN2 導入進 unity。
配置
PUN 資源導入時,會彈出對話框,設定我們的 PUN(備註:如果沒有彈出,可能是你的專案出現錯誤,把錯誤解決後就會正常彈出)。
把我們申請的 App ID 填入。
配置 PhotonServerSettings。
開始使用
如有問題可以檢閱 Photon 的使用文檔。
在專案新建一個空對象,我們將他命名為 NewworkLauncher。
新建一個腳本程式碼 Launcher,綁定腳本 。
編寫 Launcher 程式碼。
using System.Collections;
using System.Collections.Generic;
sing UnityEngine;
using Photon.Pun;
public class Launcher : MonoBehaviourPunCallbacks
{
// 在第一幀執行前調用
void Start()
{
// 使用我們設定好的 PhotonServerSettings
PhotonNetwork.ConnectUsingSettings();
}
// 是否已連接到伺服器的大廳
public override void OnConnectedToMaster()
{
Debug.Log("歡迎");
PhotonNetwork.JoinRandomRoom();
}
}
然後運行我們的項目,看看效果,是否成功連接伺服器。
繼續編寫程式碼,實現每當我們客戶端連接時產生一個主角,對應的客戶端產生對應的主角。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
public class Launcher : MonoBehaviourPunCallbacks
{
// 在第一幀執行前調用
void Start()
{
// 使用我們設定好的 PhotonServerSettings
PhotonNetwork.ConnectUsingSettings();
}
// 是否已連接到伺服器的大廳
public override void OnConnectedToMaster()
{
Debug.Log("歡迎");
PhotonNetwork.JoinRandomRoom();
// 如果 "someRoom" 房間不存在就創建,存在就加入
/**
* 第一個參數:房間的名字
* 第二個參數:房間的參數,例如最大玩家數
**/
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
// 最多 4 個玩家
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom("someRoom", roomOptions, TypedLobby.Default);
}
}
為主角新增組件
加上下面三個元件,並修改對應配置。
主要是 Photon view 元件,表示我們的伺服器是否來觀察這個遊戲角色,修改 auto find active。
修改玩家控制腳本,實現不同玩家各自操作各種的角色。
using Photon.Pun;
// …
PhotonView photonView;
void Awake()
{
// …
photonView = GetComponent<PhotonView>();
}
void Update()
{
// 連上伺服器,但如果觀察的角色不是當前腳本的角色,則無法操作
if (PhotonNetwork.IsConnected && !photonView.IsMine)
{
return;
}
// 角色操作代碼
}
// ...
將玩家設定為預設體,如果希望網路話遊戲,需要將玩家預設體加入 Resources。
刪除原廠的 player 角色或隱藏。
連線 room 之後,產生角色預設體,完整 Launcher 程式碼。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
public class Launcher : MonoBehaviourPunCallbacks
{
// 在第一幀執行前調用
void Start()
{
// 使用我們設定好的 PhotonServerSettings
PhotonNetwork.ConnectUsingSettings();
}
// 是否已連接到伺服器的大廳
public override void OnConnectedToMaster()
{
Debug.Log("歡迎");
// PhotonNetwork.JoinRandomRoom();
base.OnConnectedToMaster();
// 如果 "someRoom" 房間不存在就創建,存在就加入
/**
* 第一個參數:房間的名字
* 第二個參數:房間的參數,例如最大玩家數
**/
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
// 最多 4 個玩家
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom("someRoom", roomOptions, TypedLobby.Default);
}
// 加入房間方法
public override void OnJoinedRoom()
{
base.OnJoinedRoom();
Debug.Log("歡迎11");
// 生成玩家
// 參數1:哪個角色
// 參數2:生成的位置
// 參數3:旋轉方法
PhotonNetwork.Instantiate("Player", new Vector3(1, 1, 0), Quaternion.identity, 0);
}
}
最終效果展示
申請中國大陸地區的 PUN 雲端伺服器
由於原文作者來自中國大陸,接下來的內容將以中國大陸地區申請 PUN 雲端伺服器進行介紹。有需求或感興趣的夥伴們,歡迎繼續閱讀!
這裡申請的雲端伺服器在國外,網路非常卡頓,可以依照步驟繼續申請國內雲端伺服器。
在中國區光子雲免費申請網站申請國內 PUN 雲端伺服器,如下:
說明:剩下未展示的選項使用者可以隨便填寫,核准需等待 1~2 個工作日,核准通過後會收到郵件通知(一般會通過的),申請成功後再使用該 App ID 配置 PhotonServerSettings 就不會網路卡頓。
中國區設定方法
注意:當你的 App ID 申請了中國區後,海外就無法使用了,你可以再創建一個 App 用於海外區。
找到 LoadBalancingClient.cs 檔案進行修改。
public string NameServerHost = "ns.photonengine.io";
為
public string NameServerHost = "ns.photonengine.cn";
在 Assets\Photon|PhotonUnityNetworking\Resources 下的 PhotonServerSettings 固定區域填入 CN。
Photon Engine 影片介紹
光子引擎插件下載點
【Photon PUN 2】
官方文檔:Photon Unity Networking (PUN) SDK
————————————————
更多好用插件:【Unity 好用插件推薦】持續更新,一起讓遊戲開發事半功倍!
本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。
特約作家簡介
支持贊助 / DONATE
亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。
BTC |
352Bw8r46rfXv6jno8qt9Bc3xx6ptTcPze |
|
ETH |
0x795442E321a953363a442C76d39f3fbf9b6bC666 |
|
TRON |
TCNcVmin18LbnXfdWZsY5pzcFvYe1MoD6f |