UnityとPhoton Pun2で作るオンラインアクションゲーム制作その2 ログイン画面
まず最初に以下の様なログイン画面を作成します。
このテキストに名前を入力し、Playボタンを押すと、次の画面に移動します。
目次
ログイン画面の作成
ログイン画面に必要なオブジェクトを以下に示します。(Hierarchyビュー)
ゲームにログインする処理を行うGameManagerの作成
- 新しいシーンを作成し、
Launcherとして保存します。 - Hierarchyビューに
LauncherObjectという名前の空のGameObjectを作成します。 - 空のC#のスクリプト
CLauncherScriptを作成します。 - 作成した
LauncherObjectにCLauncherScriptをアタッチします。 - 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を作成
- Scene
Launcherを開きます。 - Hierachyビュー上で右クリックし、’UI/Button’を使用してボタンを作成し、そのボタンを
PlayButtonと名付けます。 このとき自動的にHierachyビュー内にCanvasとEventSystemのGameObjectが作成されます。 Play Buttonの子オブジェクトであるTextの値を"Play"に編集します。Play ButtonのButtonコンポーネント内のOn Click ()の小さい’+’をクリックし新しいエントリーを追加する- Hierarchyから作成したエントリのフィールドに、
LauncherObjectをドラッグします - ドロップダウンメニューから
LauncherScript.connect()を選択します。
これによりLauncherScriptとButtonが接続され、Play Buttonが押されると同時にLauncherScriptの"Connect()"メソッドが呼び出されるようになります。 - Ctrl+Sで保存します。
ここまでの作業をして実行して、Playボタンを押すと、Battleシーンに移動することができます。
名前の入力欄のUIを作成
- Scene
Launcherを開きます。 - Unityのメニューの’GameObject/UI/Input Field’を使用して名前入力欄を作成し、
NameInputFieldと名付けます。 - 位置をRect Transformの値を調節します。
NameInputFieldの子オブジェクトであるPlaceholderの値を"名前を入力"等に編集します。- 新しいC#のスクリプト
NameInputFieldScriptを作成し、以下のようにスクリプトを編集して貼り付けます。 NameInputFieldを選択して、InputFieldコンポーネント内のOn Value Changed ()の小さい’+’をクリックし、新規エントリーを作成します。- Hierarchyから作成したエントリのフィールドに、
NameInputFieldをドラッグします - ドロップダウンメニューから
NameInputFieldScript.SetPlayerNameを選択します。
これにより入力欄の文字列が変更するたびにSetPlayerNameメソッドが呼び出されるようになります。 - 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に「ルームに入りました。」というメッセージが出ていれば成功です!!
+2