Photonでルームの作成から入室まで
Photonについて
Photonとは?
Photonとは、リアルタイム通信に関する、ホスティングサービスの一つです。
SDKも整備されており、また、最小の単位であれば無料で試すことができるのでお手軽です。
Photonでできること
- ルームの作成
- ルームの検索
- ルームへの入室
- プレイヤーのマッチング
- ネットワークを介した他端末との通信
- WebHook
その他、もっといろいろな事ができると思いますが、一つ一つ試していきたいなと思っています。
初期設定
アカウントの取得
なにはともあれ、アカウントの取得を行わないと何もできません。
まずは、無料アカウントで試してみましょう。
アカウントを取得すると、ほぼ自動的にAppIDが割り当てられます。
このAppIDは後ほどUnityの方に設定するので、控えておいてください。
Photon Assetの導入
UnityからPhotonへ接続するためのライブラリを導入する必要性があります。
UnityのAsset Storeからダウンロードして、インポートするだけなので、簡単です!

インポートが完了したら、AppIDの設定をしておきます。
これで、事前準備は完了です。
早速、いろいろ試してみましょう!
ルームの作成
まずは、ルームの作成を試してみます。
ざっくりと、コードはこんな感じです。
using UnityEngine;
using UnityEngine.UI;
using UniRx;
namespace BEFOOL.PhotonTest
{
public class TestRoomController : MonoBehaviour
{
[SerializeField]
Button buttonCreateRoom;
private string roomName = "test";
public void Awake()
{
// ここでPhotonに接続している
// 0.0.1はゲームのバージョンを指定
// (異なるバージョン同士でマッチングしないように?)
PhotonNetwork.ConnectUsingSettings("0.0.1");
}
public void Start()
{
buttonCreateRoom.onClick.AsObservable().Subscribe(
x => CreateRoom(roomName)
);
}
public void CreateRoom(string roomName)
{
bool result = PhotonNetwork.CreateRoom(roomName);
Debug.Log(result); // 成功すれば「true」を出力
}
}
}
これだけですが、しっかりと「true」の出力を確認できると思います。
正直、まだ全然つながってる感じがしないですが(笑)
ルームへの入室
ルームへの入室までできたら、きっと繋がってる感じが出るに違いない!
続いて、ルームへの入室を試してみましょう。
// 先ほどとの差分だけ記載しています
namespace BEFOOL.PhotonTest
{
public class TestRoomController : MonoBehaviour
{
[SerializeField]
Button buttonCreateRoom, buttonJoinRoom;
public void Start()
{
buttonCreateRoom.onClick.AsObservable().Subscribe(
x => CreateRoom(roomName)
);
buttonJoinRoom.onClick.AsObservable().Subscribe(
x => JoinRoom(roomName)
);
}
public void JoinRoom(string roomName)
{
bool result = PhotonNetwork.JoinRoom(roomName);
Debug.Log(result); // 成功すれば「true」を出力
}
}
}
さて、これで「join」ボタンを押せば、trueが出力…
JoinRoom failed. Client is not on Master Server or not yet ready to call operations. Wait for callback: OnJoinedLobby or OnConnectedToMaster.
されなーい!
されないどころか、なんかエラー出てる!
エラーで指定されたコールバックを定義しても解決されず、、、 その他のコールバックを入れ込んでみると、原因が判明しました。
// 先ほどとの差分だけ記載しています
namespace BEFOOL.PhotonTest
{
public class TestRoomController : MonoBehaviour
{
public void OnCreatedRoom()
{
Debug.Log("room created.");
}
public void OnJoinedRoom()
{
Debug.Log("joined room.");
}
}
}
上記のようなコールバックを定義して、createボタンを押してみると…
room created.
joined room.
なるほど!
roomは作成と同時に参加処理が走っているようですね〜。
試しにもう一つUnityを立ち上げて、片方でcreate、片方でjoinを行ったところ、両方とも成功しました!
しっかりと、photonに接続できているようです。
次回に向けて
次回は、ルームに参加しているメンバーの一覧とか出してみようと思っています。
ではでは!