文章

使用Photon等插件實現簡單的多人遊戲

使用 Photon 等插件來實現一個簡單的多人遊戲是建立一個基本網路遊戲的好方法。Photon 提供了強大的網路架構和簡化的 API,可以快速開發小型到中型的多人遊戲。以下是使用 Photon Unity Networking (PUN) 實現簡單多人遊戲的步驟。

1. 安裝 Photon Unity Networking (PUN) 插件

  1. 打開 Unity Editor 並創建或打開一個 Unity 專案。
  2. 打開 Package Manager:點擊 Window > Package Manager
  3. 點擊 + 按鈕,選擇 Add package from the Unity Asset Store,然後搜索 Photon PUN 2,將其添加到項目中。

2. 設置 Photon 帳號

  1. 創建 Photon 帳號:前往 Photon 官網 註冊一個免費帳號。
  2. 創建應用程序:在 Photon Dashboard 上,創建一個新應用程序並選擇 Photon PUN
  3. 獲取 App ID:創建應用程序後,Photon 會生成一個 App ID。複製這個 ID。

3. 配置 Photon 設置

  1. 打開 Photon 設置窗口:在 Unity Editor 中,點擊 Window > Photon Unity Networking > Highlight PhotonServerSettings
  2. 輸入 App ID:在 PhotonServerSettings 面板中,將剛才複製的 App ID 粘貼到 AppId 欄位中,並確保區域設置為合適的區域(例如,USAsia)。

4. 創建基本遊戲場景

  1. 創建新場景:建立一個新的 Unity 場景(例如,MainScene)。
  2. 添加 Photon 網路管理組件
    • 創建一個空物件(GameObject > Create Empty),命名為 NetworkManager
    • NetworkManager 添加 Photon.Pun.PhotonViewPhoton.Pun.PhotonTransformView 組件。

5. 編寫基本網路腳本

5.1 連接到 Photon 伺服器

創建一個名為 NetworkManager 的腳本,來管理 Photon 連接和房間創建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using Photon.Pun;
using UnityEngine;

public class NetworkManager : MonoBehaviourPunCallbacks
{
    void Start()
    {
        // 連接到 Photon 伺服器
        PhotonNetwork.ConnectUsingSettings();
    }

    public override void OnConnectedToMaster()
    {
        // 連接成功後自動加入或創建一個房間
        PhotonNetwork.JoinLobby();
    }

    public override void OnJoinedLobby()
    {
        // 嘗試加入隨機房間
        PhotonNetwork.JoinRandomRoom();
    }

    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        // 如果沒有可加入的房間,則創建一個新房間
        PhotonNetwork.CreateRoom(null, new Photon.Realtime.RoomOptions { MaxPlayers = 4 });
    }

    public override void OnJoinedRoom()
    {
        Debug.Log("已加入房間");
        // 在房間中生成玩家角色
        CreatePlayer();
    }

    void CreatePlayer()
    {
        // 生成玩家角色
        PhotonNetwork.Instantiate("PlayerPrefab", new Vector3(0, 1, 0), Quaternion.identity);
    }
}

將此腳本附加到 NetworkManager 遊戲物件上。

5.2 創建玩家角色腳本

創建一個名為 PlayerController 的腳本,來控制玩家角色的移動和行為:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using Photon.Pun;
using UnityEngine;

public class PlayerController : MonoBehaviourPun
{
    public float moveSpeed = 5f;

    void Update()
    {
        // 只有本地玩家才能控制自己的角色
        if (photonView.IsMine)
        {
            Move();
        }
    }

    void Move()
    {
        float moveX = Input.GetAxis("Horizontal");
        float moveZ = Input.GetAxis("Vertical");
        Vector3 move = new Vector3(moveX, 0, moveZ) * moveSpeed * Time.deltaTime;
        transform.Translate(move, Space.World);
    }
}

將此腳本附加到 PlayerPrefab 上。

6. 準備玩家預置物件 (Prefab)

  1. 創建玩家預置物件
    • 創建一個簡單的 3D 物件(如 Cube),命名為 PlayerPrefab
    • 給這個物件添加 Photon.Pun.PhotonView 組件,並將 Observed Components 設置為 PlayerController(或其他需要同步的組件)。
    • 添加 Photon.Pun.PhotonRigidbodyView(如果角色有剛體)來同步物理狀態。
    • 保存這個物件為預置物件(Prefab)。
  2. 設置 Photon 預置物件
    • PlayerPrefab 拖到 Resources 文件夾下,確保 Photon 可以找到這個預置物件。

7. 測試多人遊戲

  1. 運行遊戲:按下 Play 按鈕,確保 Photon 成功連接到伺服器,並創建或加入房間。
  2. 測試多人同步:在 Unity Editor 中開啟多個窗口或打包遊戲運行多個客戶端,確認多個玩家角色在同一房間內正確同步。

8. 進階功能

  • 添加聊天系統:利用 Photon 提供的自定義消息功能來實現玩家之間的聊天。
  • 同步更多狀態:例如生命值、分數等,使用 PhotonNetwork 提供的 Custom Properties 來同步玩家數據。
  • 房間管理:為房間添加更多屬性(如最大玩家數、遊戲模式),使得遊戲更加靈活。

9. 使用 Photon 的其他功能

  • Photon Cloud:利用 Photon 的雲端伺服器進行全球玩家匹配和管理。
  • Photon Realtime 和 Fusion:根據你的遊戲需求選擇 Photon 的其他技術,這些技術提供了更多高級功能,如延遲補償、即時同步、預測回溯等。

總結

通過上述步驟,你可以使用 Photon 等插件實現一個簡單的多人遊戲。這是構建多人網路遊戲的入門步驟,接下來你可以根據需求進一步擴展遊戲功能。Photon 提供了強大而靈活的工具,使你能夠輕鬆開發各種規模的多人遊戲。

本文章以 CC BY 4.0 授權