夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Photonのチュートリアルをやる その③ ゲームシーン

本日はPhotonのチュートリアル枠です。

〇Photonとは?

PhotonはUnityでのマルチユーザーアプリの実現のためのSDKとその仕組みを指します。

オリジナルのチュートリアルは下記になります。

doc.photonengine.com

前回ルームへの接続を学びました。今回はルームの作成と退出の仕組みを学びます。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

〇ルームの作成

①Unityのプロジェクトウィンドウから新規のシーンを作成し[Room for 1]と名付けます。

f:id:Holomoto-Sumire:20210116155957j:plain

②[Floor]という名前の[Cube]を作成し原点(0,0,0)に配置します。

f:id:Holomoto-Sumire:20210116160238j:plain

③[Floor]のスケールを[20,1,20]に設定します。

f:id:Holomoto-Sumire:20210116160421j:plain

床が作成できたので次に壁を作成します。

④[Floor]を[Ctrl]キー+[D]キーで複製し、[Wall]という名前に変え、[Wall]を4つ作成します。 これは周囲の壁に当たります。

それぞれの[Wall]のTransformは次のようになります。

f:id:Holomoto-Sumire:20210116160940j:plain

f:id:Holomoto-Sumire:20210116161125j:plain

f:id:Holomoto-Sumire:20210116161246j:plain

f:id:Holomoto-Sumire:20210116161352j:plain

これでルームのオブジェクトが完成しました。

〇ゲームマネージャープレファブ

マルチユーザーゲームのすべてにおいて最も重要なインターフェースの基本要件は『ルームから退出できること』のようです。このためにボタンと連動してPhotonのルームから退出する仕組みを実装します。

①プロジェクトウィンドウから[GameManager]という名前のスクリプトを作成します。 

f:id:Holomoto-Sumire:20210116161724j:plain

②hierarchyウィンドウから空のゲームオブジェクトを配置し[GameManager0]という名前を付けます。また[GameManager0]オブジェクトに[GameManager]コンポーネントをアタッチします。

f:id:Holomoto-Sumire:20210116162233j:plain

③[GameManager]スクリプトを編集します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

using Photon.Pun;
using Photon.Realtime;

namespace Com.MyCompany.MyGame
{
    public class GameManager : MonoBehaviourPunCallbacks
    {
        #region Photon Callbacks

        /// <summary>
        /// Called when the local player left the room. We need to load the launcher scene.
        /// </summary>
        public override void OnLeftRoom()
        {
            SceneManager.LoadScene(0);
        }
        #endregion

        #region Public Methods

        public void LeaveRoom()
        {
            PhotonNetwork.LeaveRoom();
        }
        
        #endregion
    }
}
  public override void OnLeftRoom()
        {
            SceneManager.LoadScene(0);
        }

はユーザーがルームから退出した際に読み込まれます。

SceneManager.LoadScene(0)

はUnityのシーン遷移に用います。0はBuildSettingsで指定する一番最初に読み込まれるシーンです。

また

 public void LeaveRoom()
        {
            PhotonNetwork.LeaveRoom();
        }

は外部から呼び出してルームを退出することができます。

④[GameManager0]を[Project]ウィンドウにドラッグアンドドロップし、プレファブを作成します。

f:id:Holomoto-Sumire:20210116163659j:plain

Unityではロビー、ルームといった複数のシーンで一つのアプリケーションが完成します。 この複数のシーンで[GameManager0]を再使用するためにプレファブ化しています。

〇ルームの退出ボタン

ルームを退出するための機能を作成したのでボタンを作成し、機能と結び付けます。

①hierarchyウィンドウで[UI/Plane]を新規作成します。

f:id:Holomoto-Sumire:20210116164122j:plain

②作成したPlaneに[Top Plane 1]と名付けます。

f:id:Holomoto-Sumire:20210116164933j:plain

③[Top Plane 1]オブジェクトから[Image]と[Canvas Renderer]を削除します。

f:id:Holomoto-Sumire:20210116165417j:plain

④ [Top Plane 1]の[RectTransform]の高さを50に指定します。

⑤ [Top Plane 1]の子オブジェクトに[Button]を配置し[Leave Button]と名付けます。

f:id:Holomoto-Sumire:20210116170508j:plain

⑥[Leave Button]のinspectorウィンドウから[OnClick()]にイベントを追加し[GameManager0]の[LeaveRoom()]を指定します。

f:id:Holomoto-Sumire:20210116170728j:plain

⑦[Leave Button]をプロジェクトウィンドウにドラッグアンドドロップしプレファブを作成します。

f:id:Holomoto-Sumire:20210116170823j:plain

〇ほかのルームの作成

[Room for 1]を複製し[Room for 4]までを作成します。

f:id:Holomoto-Sumire:20210116171005j:plain

〇ビルド設定

[GameManager]コンポーネントではBuildSettingsのシーン番号で遷移シーンを変えていました。

BuildSettingsを開いてシーンをaddします。

[Launcher]シーンが0で[Room for 〇]に対応する順番でシーンを追加します。

f:id:Holomoto-Sumire:20210116171411j:plain

以上でゲームシーンの完成が完了しました。