はじめに
Unityの使い方を学び数か月・・・。
ゲーム制作の基本は理解したが、オンラインゲームはどうやって作るんだ?
・・・ということで調べてみると、何やらPhotonという便利なものがあるらしい!
オンラインゲームを自作するべくまずはPhotonについて学ぶことにした。
1.Photonって何?
そもそもPhotonとは何なのか。
Photonはマルチプレイヤー対応ゲーム向けにリアルタイム通信を行うためのサーバーシステムとクライアントフレームワークを提供しているシステムである。
Photonを利用することでプレイヤー間での接続・同期が簡単に行えるようになる。
Photonのサーバには、ネームサーバ・マスターサーバ・ゲームサーバが存在し、プレイヤーはゲームサーバ内にルームを作成することで同ルーム内のプレイヤー同士でゲームを遊ぶことが出来る。
2.Photonを使うメリットは?
Photonのメリットは上記のように簡単にプレイヤーの接続・同期が行うことが出来る他、自身でサーバを用意する必要がないというメリットがある。
自分でサーバを用意すると場所や金銭コストが掛かり、ハードルが高く感じてしまう。
しかし、Photonは無料で最大20人まで同時通信が可能である!
無料プランでは1ルームのメッセージ数が500と定められていて、それを超えると無料プランでも超過料金がかかる可能性がある。
3.実際にPhotonを使ってみる
UnityでPhotonを使うには、AssetStoreにあるPUN2を使うことで容易に実装できる。
サーバへの接続
サーバへの接続は以下の記法で可能である。
// マスターサーバーへ接続する
PhotonNetwork.ConnectUsingSettings();
この一文のみでマスターサーバへの接続が可能である。
接続完了後はOnConnectedToMaster関数を継承して使用すれば接続後の処理を行うことが出来る。
// マスターサーバーへの接続後に呼ばれるコールバック
public override void OnConnectedToMaster() {
// マスターサーバ入室後に行いたい処理を書く
}
ここでよく使われるのがゲームサーバの作成・入室である。
// GameRoomという名前のサーバを作る
PhotonNetwork.CreateRoom(”GameRoom”);
この一文で「ルーム」という名前のルーム(ゲームサーバ)が作成可能である。
CreateRoomの引数にRoomOptionsを入れることで最大参加人数などルームごとの設定を自身で指定することも出来る。
// オプションでサーバの参加は最大8人に設定する
RoomOptions options = new RoomOptions();
options.MaxPlayers = 8;
// 作成したオプションを引数に
PhotonNetwork.CreateRoom(enterRoomName.text, options);
接続完了後はOnJoinedRoom関数を継承することでその後の処理を記述することが出来る。
// ルーム入室後に呼ばれるコールバック
public override void OnJoinedRoom()
{
// ルーム入室後に行いたい処理を書く
}
ゲーム開始
ルーム作成後、ゲームを開始するときはPhotonNetwork.LoadLevel関数を呼び出すことで任意のシーンへ切り替えてゲームを始められる。
// SceneBattleという名前のシーンに移動する
PhotonNetwork.LoadLevel(SceneBattle);
また、ゲームから途中で抜けることが出来るOnPlayerLeftRoom関数、もしもルームを作成したマスタープレイヤーが離れた場合に呼ばれるOnMasterClientSwitched関数も用意されており、それぞれに処理を記載することでゲームごとに設定を変えることが出来る。
PunRPCでの同期
プレイヤーの動機には同期するオブジェクトにPhotonViewコンポーネントを追加し、PunRPC属性を同期させたい関数に追加することで可能となる。
[PunRCP]
public void Hoge(){
// 同期させたい処理を書く
}
まとめ
Photonは無料でゲームサーバの作成やプレイヤーの同期などオンラインゲームに必要な処理を簡易・簡潔に行うことが出来る。それはプログラム初心者でも理解しやすく実践し易いものであった。
PUN2からはUnityが非推奨としているResourceファイルを使わずにプレハブを呼び出すことも可能になった。
随時調べたことを追記もしくは新規に記事を作成していきます。