先日、オンラインゲームのログインシステムを紹介しました↓
【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
}
参考まで^^

