アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

UnityとPhoton Pun2で作るオンラインアクションゲーム制作その2 ログイン画面

2020年7月6日

まず最初に以下の様なログイン画面を作成します。

このテキストに名前を入力し、Playボタンを押すと、次の画面に移動します。

記事内広告

ログイン画面の作成

ログイン画面に必要なオブジェクトを以下に示します。(Hierarchyビュー)

Hierarchyビュー

ゲームにログインする処理を行うGameManagerの作成

  1. 新しいシーンを作成し、Launcherとして保存します。
  2. HierarchyビューにLauncherObjectという名前の空のGameObjectを作成します。
  3. 空のC#のスクリプトCLauncherScriptを作成します。
  4. 作成したLauncherObjectCLauncherScriptをアタッチします。
  5. CLauncherScript を以下のように編集します。

CLauncherScript .csのスクリプト

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using Photon.Pun;
using Photon.Realtime;
public class CLauncherScript : MonoBehaviourPunCallbacks
{
#region Public変数定義
//Public変数の定義はココで
#endregion
#region Private変数
//Private変数の定義はココで
#endregion
#region Public Methods
//ログインボタンを押したときに実行される
public void Connect() 
{
if (!PhotonNetwork.IsConnected) { //Photonに接続できていなければ
PhotonNetwork.ConnectUsingSettings(); //Photonに接続する
Debug.Log("Photonに接続しました。");
}
}
#endregion
#region Photonコールバック
  //ルームに入室前に呼び出される
public override void OnConnectedToMaster() 
{
Debug.Log("OnConnectedToMasterが呼ばれました");
// "room"という名前のルームに参加する(ルームが無ければ作成してから参加する)
PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default);
}
//ルームに入った時に呼ばれる
public override void OnJoinedRoom()
{
Debug.Log("ルームに入りました。");
//battleシーンをロード
PhotonNetwork.LoadLevel("Battle");
}
#endregion
}

ゲーム開始ボタンのUIを作成

  1. Scene Launcherを開きます。
  2. Hierachyビュー上で右クリックし、’UI/Button’を使用してボタンを作成し、そのボタンをPlayButtonと名付けます。 このとき自動的にHierachyビュー内にCanvasとEventSystemのGameObjectが作成されます。
  3. Play Buttonの子オブジェクトであるTextの値を"Play"に編集します。
  4. Play ButtonのButtonコンポーネント内のOn Click ()の小さい’+’をクリックし新しいエントリーを追加する
  5. Hierarchyから作成したエントリのフィールドに、LauncherObjectをドラッグします
  6. ドロップダウンメニューからLauncherScript.connect()を選択します。

    これによりLauncherScriptとButtonが接続され、Play Buttonが押されると同時にLauncherScriptの"Connect()"メソッドが呼び出されるようになります。
  7. Ctrl+Sで保存します。

ここまでの作業をして実行して、Playボタンを押すと、Battleシーンに移動することができます。

名前の入力欄のUIを作成

  1. Scene Launcherを開きます。
  2. Unityのメニューの’GameObject/UI/Input Field’を使用して名前入力欄を作成し、NameInputFieldと名付けます。
  3. 位置をRect Transformの値を調節します。
  4. NameInputFieldの子オブジェクトであるPlaceholderの値を"名前を入力"等に編集します。
  5. 新しいC#のスクリプト NameInputFieldScriptを作成し、以下のようにスクリプトを編集して貼り付けます。
  6. NameInputFieldを選択して、InputFieldコンポーネント内のOn Value Changed ()の小さい’+’をクリックし、新規エントリーを作成します。
  7. Hierarchyから作成したエントリのフィールドに、NameInputFieldをドラッグします
  8. ドロップダウンメニューからNameInputFieldScript.SetPlayerNameを選択します。

    これにより入力欄の文字列が変更するたびにSetPlayerNameメソッドが呼び出されるようになります。
  9. Ctrl+Sで保存します。

CNameInputField.csのスクリプト

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Photon.Pun;
using Photon.Realtime;
public class CNameInputField : MonoBehaviourPunCallbacks
{
#region Private変数定義
static string playerNamePrefKey = "PlayerName";
InputField _inputField;
#endregion
#region MonoBehaviourコールバック
void Start()
{
string defaultName = "";
_inputField = this.GetComponent<InputField>();
//前回プレイ開始時に入力した名前をロードして表示
if (_inputField != null)
{
if (PlayerPrefs.HasKey(playerNamePrefKey))
{
defaultName = PlayerPrefs.GetString(playerNamePrefKey);
_inputField.text = defaultName;
}
}
}
#endregion
#region Public Method
public void SetPlayerName()
{
PhotonNetwork.NickName = _inputField.text + " "; //今回ゲームで利用するプレイヤーの名前を設定
PlayerPrefs.SetString(playerNamePrefKey, _inputField.text); //今回の名前をセーブ
Debug.Log(PhotonNetwork.NickName); //playerの名前の確認。(動作が確認できればこの行は消してもいい)
}
#endregion
}

この時点でゲームを実行すると入力欄の文字列を変更するたびにConsoleに名前が表示されます。これでログイン画面のシーンの完成です。

Consoleに「ルームに入りました。」というメッセージが出ていれば成功です!!