今回は以下のようなログイン画面を作成します。
この画面ではテキスト入力欄に自分のニックネームを入力し、Playボタンを押すと、次の画面に遷移するというような処理を実装します。
ログイン画面の作成
まずログイン画面に必要なオブジェクトを確認します。
以下の画像が完成後のHierarchyビューです。
ゲームにログインする処理を行うLauncherObject作成
- 新しいシーンを作成し、
Launcher
として保存します。 - Hierarchyビューに
LauncherObject
という名前の空のGameObjectを作成します。 - 空のC#のスクリプト
LauncherScript
を作成します。 - 作成した
LauncherObject
にLauncherScript
をアタッチします。 LauncherScript
を以下のように編集します。
LauncherScript.csのソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class LauncherScript : Photon.PunBehaviour { #region Public変数定義 //Public変数の定義はココで #endregion #region Private変数 //Private変数の定義はココで string _gameVersion = "test"; //ゲームのバージョン。仕様が異なるバージョンとなったときはバージョンを変更しないとエラーが発生する。 #endregion #region Public Methods //ログインボタンを押したときに実行される public void Connect() { if (!PhotonNetwork.connected) { //Photonに接続できていなければ PhotonNetwork.ConnectUsingSettings(_gameVersion); //Photonに接続する Debug.Log("Photonに接続しました。"); } } #endregion #region Photonコールバック //Auto-JoinLobbyにチェックを入れているとPhotonに接続後OnJoinLobby()が呼ばれる。 public override void OnJoinedLobby() { Debug.Log("ロビーに入りました。"); //Randomで部屋を選び、部屋に入る(部屋が無ければOnPhotonRandomJoinFailedが呼ばれる) PhotonNetwork.JoinRandomRoom(); } //JoinRandomRoomが失敗したときに呼ばれる public override void OnPhotonRandomJoinFailed(object[] codeAndMsg) { Debug.Log("ルームの入室に失敗しました。"); //TestRoomという名前の部屋を作成して、部屋に入る PhotonNetwork.CreateRoom("TestRoom"); } //部屋に入った時に呼ばれる 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で保存します。
NameInputFieldScript.csのソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using UnityEngine; using UnityEngine.UI; using System.Collections; public class NameInputFieldScript : MonoBehaviour { #region Private変数定義 static string playerNamePrefKey = "PlayerName"; #endregion #region MonoBehaviourコールバック void Start() { string defaultName = ""; InputField _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(string value) { PhotonNetwork.playerName = value + " "; //今回ゲームで利用するプレイヤーの名前を設定 PlayerPrefs.SetString(playerNamePrefKey, value); //今回の名前をセーブ Debug.Log(PhotonNetwork.player.NickName); //playerの名前の確認。(動作が確認できればこの行は消してもいい) } #endregion } |
この時点でゲームを実行すると入力欄の文字列を変更するたびにConsoleに名前が表示されます。
これでログイン画面のシーンの完成です。
動作テストをしてみてください。
Consoleに「ルームに入りました。」というメッセージが出ていれば成功です!!
次回予告!!
次回からはついにゲームシーンについての講座となります!!
お楽しみに!!!