UnityでPhotonEngineを活用してマルチプレイヤーオンラインゲーム開発を実現 (2)

UnityでPhotonEngineを活用してマルチプレイヤーオンラインゲーム開発を実現 (2)

前回の記事はMacの電源が切れたので急いで書いたもので、ロジックがあまり良くなく、説明が抜けている部分もあるかもしれません。最初に何か付け加えさせてください:

無料の Photon Cloud を申請する正しい手順は、まずグローバル公式 Web サイトでアカウントを登録し、次に Photon Cloud アプリケーションを作成し、APP ID を取得し、この APP ID を使用して中国の Web サイトにアクセスして申請することです。適用する場合は、APP ID タイプとして Photon を選択することにも注意する必要があります。
ここに画像の説明を挿入します

OK、では、前の記事で述べた目標を 1 つずつ達成していきましょう。

  • Unity でロード バランシング クライアント スクリプトを検索して開きます
    ここに画像の説明を挿入します
    。NameServerHost を見つけます。元は http://ns.exitgame.com でした。それを http://ns.photonengine.cn に変更して保存し、Fixed に
    ここに画像の説明を挿入します
    移動します。
    ここに画像の説明を挿入します
    地域とcnを入力します。
  • 初期シーンの構築とリンク ネットワーク スクリプトの作成:
    ボタン button と NetworkingManager という名前のスクリプトを作成し、スクリプトをマウントするための空のオブジェクト (同じく NetworkingManager という名前) を作成します。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  • スクリプト作成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//引入命名空间
using Photon.Pun;
using Photon.Realtime;

//让脚本继承MonoBehaviourPunCallbacks类,这个类是关于回调函数的
public class NetworkingManager : MonoBehaviourPunCallbacks
{
    
    
    [SerializeField]
    private int sceneIndex;
    //当按钮被点击的时候判断一下是否与服务器链接,如果链接成功就加入房间,否则开始链接。
    public void ClickBtn()
    {
    
    
        if (PhotonNetwork.IsConnected)
        {
    
    
            PhotonNetwork.JoinRandomRoom();
        }
        else
        {
    
    
            PhotonNetwork.ConnectUsingSettings();
        }
    }
    //尝试与主服务器进行链接时调用
    public override void OnConnectedToMaster()
    {
    
    
        PhotonNetwork.JoinRandomRoom();
    }
    //当链接成功时调用
    public override void OnConnected()
    {
    
    
        Debug.Log("------链接成功------");
    }
    //当链接失败的时候
    public override void OnDisconnected(DisconnectCause cause)
    {
    
    
        Debug.Log("------链接失败------");
    }
    //当加入大厅成功的时候
    public override void OnJoinedLobby()
    {
    
    
        Debug.Log("------加入大厅成功------");
    }
    //加入房间失败的时候调用,加入房间失败,并创建房间,可容纳最大人数为5人
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
    
    
        Debug.Log("------加入房间失败------");
        Debug.Log("------建立新房间,最大可容纳5人------");
        PhotonNetwork.CreateRoom("RoomName",new RoomOptions {
    
     MaxPlayers = 5 });
    }
    //创建房间成功
    public override void OnCreatedRoom()
    {
    
    
        Debug.Log("------创建房间成功------");
    }
    //创建房间失败
    public override void OnCreateRoomFailed(short returnCode, string message)
    {
    
    
        Debug.Log("------创建房间失败------");
    }
    //加入房间成功,并跳转场景至游戏界面
    public override void OnJoinedRoom()
    {
    
    
        Debug.Log("------加入房间成功------");
        PhotonNetwork.LoadLevel(sceneIndex);
    }
    //离开房间时调用
    public override void OnLeftRoom()
    {
    
    
        Debug.Log("------离开房间------");
    }
    //离开大厅时调用
    public override void OnLeftLobby()
    {
    
    
        Debug.Log("------离开大厅------");
    }
}

各コールバック関数のコメントは詳しく書かれているので、いちいち紹介しません。書き込みが完了したら、ボタンをクリックした後にトリガーされるメソッド ClickBtn() を追加します。
実行を開始し、接続をクリックしてテストできます。次の画像は、テスト実行の結果です。
ここに画像の説明を挿入します

  • シーンがジャンプした後、簡単なインタラクションを作成します (WASD キーでプレーヤーの動きを制御します)
    ここでは単純ですが、ネットワーク内の他のプレーヤーを同期する必要があるため、プレーヤーのようなプレハブを作成する場合は 2 つ追加する必要があることに注意してください。 2 つのコンポーネント、すなわちPhotonViewPhotonTransformViewまた、エンジンがこのディレクトリに基づいてプレーヤーを見つけられるように、プレハブを Resource というフォルダーに配置する必要があります。
    ここに画像の説明を挿入します
    GameManager という名前の空のオブジェクトにインタラクティブ コードを書きました。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    コードは次のとおりです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//引入命名空间
using Photon.Pun;

public class GameManager : MonoBehaviourPun  //继承MonoBehaviourPun类
{
    
    
    [SerializeField]
    private GameObject Player;
    private GameObject go = null;

    //游戏一开始就把玩家实例话出来
    private void Awake()
    {
    
    
        go = PhotonNetwork.Instantiate(Player.name, Vector3.zero, Quaternion.identity);   
    }
    /// <summary>
    /// WASD键跟新player的位置信息
    /// </summary>
    private void Update()
    {
    
    
        go.transform.position += Input.GetAxis("Horizontal") * Vector3.right * 0.4f;
        go.transform.position += Input.GetAxis("Vertical") * Vector3.forward * 0.4f;

    }
}
  • エクスポートして保存して実行
    ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41294510/article/details/131511470