Photonでルームの作成から入室まで

木内智史之介(シャッチョー)
ミンカさんけっこんしてくださいおねがいします(ズザー SEGAさん、DIVAの筐体ください(ズザー

Photonについて

Photonとは?

Photonとは、リアルタイム通信に関する、ホスティングサービスの一つです。
SDKも整備されており、また、最小の単位であれば無料で試すことができるのでお手軽です。

Photonでできること

  • ルームの作成
  • ルームの検索
  • ルームへの入室
  • プレイヤーのマッチング
  • ネットワークを介した他端末との通信
  • WebHook

その他、もっといろいろな事ができると思いますが、一つ一つ試していきたいなと思っています。

初期設定

アカウントの取得

Photon realtime 公式ホームページ

なにはともあれ、アカウントの取得を行わないと何もできません。
まずは、無料アカウントで試してみましょう。

アカウントを取得すると、ほぼ自動的に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に接続できているようです。

次回に向けて

次回は、ルームに参加しているメンバーの一覧とか出してみようと思っています。
ではでは!