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 つのコンポーネント、すなわちPhotonViewとPhotonTransformView。また、エンジンがこのディレクトリに基づいてプレーヤーを見つけられるように、プレハブを 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;
}
}
- エクスポートして保存して実行