先日、オンラインゲームのログインシステムを紹介しました↓
【Unityでオンラインゲーム】Photonサーバーを用いたルーム・ロビーの作り方【即使えるコードも公開】
おおまかにPhotonのサーバーに関する知識がわかったと思いますが、
もっとシンプルなものにカスタマイズする方法を、
ここではいくつか紹介していきます。
案①:ログイン後、全員1つのルームに入って即ゲーム(オープンワールド向け)
案②:後日追加予定・・・
案①:ログイン後、全員1つのルームに入って即ゲーム
a.ニックネームを入れてログインする画面(LoginPanel)
子要素:
・InputField(ニックネーム入力)
・Button( ConnectToPhotonServer()を呼び出す)
b.接続中を示す画面(ConnectingPanel)
子要素:
・Text(Connecting...を表示)
c.接続完了後、クイックスタートする画面(QuickStartPanel)
子要素:
・Button(JoinRandomRoom()を呼び出す)
PhotonNetwork.AutomaticallySyncScene = true;
LoginPanelを SetActive(true) にする
#Public Methods
・public void ConnectToPhotonServer()(仮名)←Loginボタンで呼ぶ
PhotonNetwork.LocalPlayer.NickNameという変数に、
InputFieldのtextを部分を入れる
PhotonNetwork.ConnectUsingSettings()を呼ぶ
PhotonNetwork.JoinRandomRoom()を呼ぶ
CnnectingPanelを SetActive(true)にする
CreateAndJoinRoom()を呼ぶ
※参加するルームがなければ自動作成させるため
・public override void OnJoinedRoom()
PhotonNetwork.LoadLevel("○○")でゲームシーンに移動する
#Private Methods
void CreateAndJoinRoom()
自動作成するルーム設定(roomNameやroomOptions)を記載し、
PhotonNetwork.CreateRoom(roomName, roomOptions)を呼ぶ
以上、
これらのコードを書いたScriptを
シーンの空のゲームオブジェクトにアタッチすれば出来上がります。
【参考】コード内容
案①のコード内容は、このようになっています。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; public class QuickLobbyManager : MonoBehaviourPunCallbacks { public GameObject EnterGamePanel; public InputField playerNameInput; public GameObject ConnectingPanel; public GameObject LobbyPanel; #region Unity Methods private void Start() { PhotonNetwork.AutomaticallySyncScene = true; EnterGamePanel.SetActive(true); ConnectingPanel.SetActive(false); LobbyPanel.SetActive(false); } #endregion #region Public Methods public void ConnectToPhotonServer() //初期画面でボタンで読む(Name送信と接続) { if(!PhotonNetwork.IsConnected) //接続してたらニックネーム送信し、UI動かす { string playerName = playerNameInput.text; if(!string.IsNullOrEmpty(playerName)) { PhotonNetwork.LocalPlayer.NickName = playerName; PhotonNetwork.ConnectUsingSettings(); ConnectingPanel.SetActive(true); EnterGamePanel.SetActive(false); } } else{} } public void JoinRandomRoom() //ボタンでランダムに参加する { PhotonNetwork.JoinRandomRoom(); } #endregion #region Photon Callbacks public override void OnConnectedToMaster() //サーバー接続処理 { //Debug.Log(PhotonNetwork.NickName+ "Connected to Photon server"); LobbyPanel.SetActive(true); ConnectingPanel.SetActive(false); } public override void OnJoinRandomFailed(short returnCode, string message) { //Debug.Log(message); CreateAndJoinRoom(); } public override void OnJoinedRoom() { //Debug.Log(PhotonNetwork.NickName+ "joined to"+ PhotonNetwork.CurrentRoom.Name); PhotonNetwork.LoadLevel("GameScene"); //シーンをロード } #endregion #region Private Methods void CreateAndJoinRoom() { string roomName = "Room" + Random.Range(0, 10000); //ルーム名 RoomOptions roomOptions = new RoomOptions(); roomOptions.IsOpen = true; roomOptions.IsVisible = true; roomOptions.MaxPlayers = 20; //定員 PhotonNetwork.CreateRoom(roomName,roomOptions); } #endregion }
参考まで^^