Boss Room: a Co-op, Multiplayer RPG Sampleを触ってみる

Unity公式のマルチプレイヤーゲームのサンプル:
Boss Room: a Co-op, Multiplayer RPG Sample
を使おうということで、以下勉強中に書いたメモを残しておきます。
基本的には公式からのdocument:
の通りに進めていきますので、新しいことはないかもしれませんが、
元のマニュアルは英語なので、日本語訳がてらメモを残そう、ということです。
(後の自分のためにもなるからね)
結構DeepLの直訳です。早いからね。

【目的】
・Boss Roomをインストールして、色々触ってみる、動かしてみる。
・最終的には2Dのゲームを作りたいので、2Dのゲームに移行できるように、
 マルチプレイヤー・ネットワーク関連の動作の原理を理解する。
(・せっかくなので3Dのマルチのゲームを作れるようにもなりたい)


【前提】
・windows環境
・Unityそのものの使い方はちょっと知っている
 (私は2Dのパズルゲームを一つリリースしている程度なので、大した経験はない)
(・PUN2は使ったことがある)


【Boss Room Overview Boss Roomの概要】
Boss Roomは、キャラクタの能力、遅延を見えなくするためのキャスティング・アニメーション、複製オブジェクト、RPC、Relay、Lobby、Authenticationサービスとの統合など、マルチプレイヤー・ゲーム・フローの背後にあるコンセプトやパターンを探求するのに役立つように設計されています。
このプロジェクトは、あなた自身のUnityゲームのための参考出発点として使用することも、要素を個別に使用することもできます。


【Getting the project Boss Roomの始め方】
Gitからダウンロードして使います。私はDirect Downloadのところに書いている通り、Code ButtonからDownkiad Zipでダウンロードしました。Zipを解凍(展開)して、Unityの他のゲームプロジェクトと同じ場所に移動します。


【Opening the project for the first time Boss Roomを最初に開く時】
プロジェクトをダウンロードしたら、以下のステップに従ってプロジェクトを立ち上げてください:
・最新のLTSエディターバージョンがインストールされていることを確認してください。
 Unity EditorのインストールにWindows/Macのスタンドアロンサポートを
 含めてください。
 私は2022.3.20f1(LTS)をインストールしました。
・Add ボタンを選択し、ダウンロードしたプロジェクトのルートフォルダを指定して、
 プロジェクトを Unity Hub に追加します。
 日本語Unity Hubの場合、プロジェクト→追加→上記で移したプロジェクトをクリック
 で追加できます。
 ただし、2022.3.14f1が必要と言われたので2022.3.14f1をインストールしました。
 3.20の方が新しいのでは?まあいいか。
 Unityはプロジェクトを初めて開いたときにすべてのプロジェクトアセットを
 インポートするので、通常より時間がかかります。
・Play ボタンを選択します。ゲーム内のUIを使用して、新しいゲームをホストしたり、
 既存のゲームに参加したりできます。

【Exploring the project 実際にBoss Roomを触る】
マニュアルより直訳:
 ボスルームは8人協力プレイのRPGゲームで、プレイヤーは協力してインプ、
 そしてボスと戦う。プレイヤーは、同様の小規模なネットコードゲームで
 よく見られる特徴を教育向けに実装したキャラクタークラスから選択できる。
 操作モデルはクリックによる移動で、スキルはマウスボタンかホットキーで発動する。
だそうなので、実際にやってみます。

Unity Hubから、(デフォルト名)com.unity.multiplayer.samples.coop-mainをクリックしてeditorで開きます。

開いてプレイボタンを押すとこんな感じ。BGMもついているし、右上のsettingボタンから
調整もできる。

上から順番に
・Start with Lobby・・・ロビーを使って開始
・Start with Direct IP ・・・IPアドレスを使ってhost/joinができる。これは使わない。
・Change Profile・・・profileを新規作成/変更できるらしいが、よくわからなかった。
のようです。ただし、一番上のロビー機能は画像にもある通り、project IDを設定していないから使えないとのこと。そりゃそうだ。ここから始めましょう。


【Unity Gaming Services ProjectIDを設定する】
上の画像で書かれている通り、AssetフォルダにあるReadMeファイルを見てみます。

これですね。How to set up Unity Gaming Services(UGS)の欄にあるリンクに進むと、
直訳:
 Boss Roomはプレイヤー間の接続を容易にするためにUGSのいくつかのサービスを
 利用しています。プロジェクト内でこれらのサービスを使用するには、
 Unity Dashboard内で組織を作成し、RelayとLobbyサービスを有効にする必要が
 あります。
という説明があります。
create an organization,  Relay, Lobby の3つのリンクがありますが、
1つ目はUnity IDのセットアップのようなものだったので、飛ばします。(既に持っている)
2つ目と3つ目のリンクを見てみると、すべきことが色々書いていたので、
言われたとおりに進めます。


【Unity Gaming Services ProjectIDを設定する:ロビー編】
とりあえずロビー機能から始めましょう。
1.Unity Cloud Dashboardに入ります。
2.左のバーの「プロジェクト」でプロジェクト名を入力して登録します。
  今回はデフォルトの「com.unity.multiplayer.samples.coop-main」とした。
3.左のバーの「製品」のMULTIPLAYERの欄の「Lobby」をクリック
4.右上のLaunchをクリック。「Link Unity project」というinstructionが出るので
  書かれている通りに進める。
5.Open your project in the Unity Editor and navigate to Edit > Project Settings.
  エディター上でEdit→Project serttingの順番で開く。
6.From the Project Settings window, go to the Services tab.
7.「Use an existing Unity project」のところにチェックを入れて、
  organizationとCloud projectの欄で目的のものを選ぶ。
8.「Link Unity project to cloud project」をクリックすると、
  サーバとのリンクができる。"Project was linked successfully"と上部に出たら成功。
9.editorにパッケージをインストールする。
  boss roomを開いた場合はすでにインストールされているが、
  一応説明しておく。
  Window > Package Managerで進み、"Lobby"パッケージをインストールする。
10.サンプルがあるらしい。2つあって、一つはこのboss room. 2つ目は、
  Game Lobby sampleというやつ。自分でゲームを作る時はこれをインポートして
  使ったらいいのかもしれない。

これでロビー機能が使えます。(はやい!)
試しにまたBoss Roomをプレイしてみると、最初はクリックできなかった
「Start With Lobby」ボタンがクリックできるようになっていて、
自分で部屋を作ったり参加できたりします。
こんな感じ。


【Unity Gaming Services ProjectIDを設定する:リレー編】
先ほどはロビーだけ作ったのですが、実際のゲームはリレー通信
(各プレイヤーはリレーサーバ越しに通信する)なので、これも設定する必要があります。
↓はリレー通信(リレーサーバを介した通信)の説明画像。
公式によるBoss Roomを用いたNetcode for GameObjectsの説明動画より抜粋。

ちなみに、リレーサーバはロビー機能は持っていないので、
マッチングはロビーサーバを介して行い、マッチングしたプレイヤーたちは
同一のリレーサーバのネットワークに連れていかれる、という流れ。
(正確ではないかもしれないが、大体はこの理解でいいはず。)

さて、実際のリレー通信関連の設定を行います。
実はこれはすでに終わっているも同然で、Unity CloudとlinkしていたらOKらしい。
ただし、Window > Package Managerで進み、"Relay"パッケージをインストールする
必要がある。もちろん、Boss room projectにはすでにインストールされている。


【マルチができるか確認してみる】
windowsでビルドして2つのPCでやってみたところ、
ロビー機能を使って部屋作成/参加ができました。ゲームプレイもできました。
友人に協力してもらい、別のネットワークでの接続できました。
ただし、webGLでビルドしてunityroomやunity playで公開したところ、
マルチはできませんでした。
具体的には、ロビー作成はできるし作った部屋が一覧に現れるのは確認できるのですが、
参加しようとするとダメみたいです。
なのでたぶんリレー通信がうまくいっていないようです。


【まとめ】
今日はBoss Roomをインストールして、
ネットワーク関連の設定、特にUnity Cloudを使ったLobby, Relay設定をすることで
マルチプレイができることを確認しました。
次回は他のゲームにロビー機能(とリレー通信の一部)を他のプロジェクトで
コピーして実装することを目的とします。
(作りたいのが2Dゲームなので)


【参考】



コメント

このブログの人気の投稿

【TopDown Engine】見下ろし2Dアクションゲームのためのアセット

初投稿

【コルーチン】処理順を大事にしたい時、処理を待ちたい時に使うコルーチンについて