アマゾンバナーリンク

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に「ルームに入りました。」というメッセージが出ていれば成功です!!