この記事は海洋大技術系サークル Advent Calendar 2023の12日目です。
はじめに
学校の課題とバイトでいっぱいいっぱいすぎてゲーム開発全然進められていないんですけど…
百万年後…
さて今回、Photonを利用してオンライン対戦を現在開発中のゲームに組み込んでいきたいと思って勉強したのでその備忘録。ロビーに接続、ルームの作成、ルームに接続、ゲームシーンへの移動までを超簡単に書きます。コードの意味はまだあんまり理解してないんで、なんかこうしたらできるらしいんだよねみたいな感覚で書いてます。認識の誤っている部分たくさんあると思うんで有識者の方いらっしゃいましたらご指摘の方よろしくお願いします
準備
Photonのアセットをプロジェクトにインポートし、セットアップを行います
Appld or Emailの部分にはPhotonで作成したプロジェクト(Photonにログイン→ダッシュボード→新しいアプリを作成する→アプリケーションタイプ:マルチプレイヤーゲーム、Photonの種別:Pun に設定して作成する)のアプリケーションIDをコピペします
↑Photonのプロジェクト作成画面
Photonのライブラリ
今回はPhotonSettingという名前でスクリプトを作成しました。
以下のように書くとPhotonを利用することができるようになります
using Photon.Pun;
上のusingがいっぱい書いてあるところにこれを追加します
あとクラス名のところ
public class PhtonSetting : MonoBehavior
これを
pulblic class PhotonSetting : MonoBehaviorPunCallbacks
これに書き換えます。MonoBehaviorではなくMonoBehaviorPunCallbacksを継承するようにします
ネットワークに接続
ゲーム開始時、ネットワークに接続するには以下のように書きます。例えばこれをStart()関数で呼べばゲーム起動時にネットワークに接続するようになります
void Start()
{
PhotonNetwork.ConnectUsingSettings();
}
ロビーに接続
ネットワークに接続しているプレイヤーを管理するにはロビーを使います。ロビーに接続する処理は以下のように書きます
public void ConnectLobby()
{
PhotonNetwork.JoinLobby();
}
ルームを作成
ルームを作るには以下のように書きます。ボタンなどに設定しておいて、クリックされたら部屋が作成されるようにするみたいですね。この時ルーム名を設定する必要があるようですがそれの実装については本題から逸れるので割愛
public void CreateRoom()
{
RoomOptions roomOptions = new RoomOptions();
PhotonNetwork.CreateRoom("RoomName", roomOptions)
}
また、ルームに接続するにはJoinRoom()関数を利用します。引数にはルームを作成する際にプレイヤーが設定したルームの名前を設定します
public void ConnectRoom()
{
PhotonNetwork.JoinRoom(roomName)
}
ルーム内のプレイヤーをゲームシーンに遷移させる
ルームを作成し、プレイヤーが集まったらゲームスタートです。そのためにはゲームシーンに移行する必要がありますね。LoadLevel()関数を利用します。引数はゲームシーンのシーン名を入れます。
public void ToGameScene()
{
PhotonNetwork.LoadLevel(SceneName);
}
まとめ
Unityでオンライン対戦を実装するための超ザックリとした流れとしてはこんな感じだと思います。プログラム自体は数行書くだけだったので意外と簡単なのかな(殴)。あとはボタンに関数を設定して、ルームの作成、ルームに接続、ゲームの開始ボタンなどを作っていきましょう。
僕が今作ってる将棋アプリの場合はロビー(下図ではマッチングまち画面と表記)にプレイヤーを集めて、集まったプレイヤーさんたちの対戦成績とかを比較してちょうどいい組み合わせが見つかったらルームを作成して、そのルームに2人をいれて対局開始!みたいな形にしようと思ってます。(僕のイメージは下図)