創作世界のいろいろ〜AdobeとかC#とか

絵を描く人がC#とか3Dとか動画編集とかやる為の備忘録

【連載 Unity初心者向け】歴史学習アプリを作る(3 ユーザー登録の実装)

試験的連載モノ[初心者がUnityで学習アプリを作る] 3

初心者だけど少しでもそれっぽいデザインも加えてゲームを作りたい・至極単純なサンプルではなく実際に使えそうな実装をしてみたい方向けに、初心者の私が学習アプリを作る過程を記事にします。

↓本記事ではこの登録機能の実装部分(NCMB使用)を作っていきます。

↓実際にクラウド上で登録が成功していることを確認するところまでやります。

 

 NCMB機能を呼び出すコードサンプル

※NCMB公式サンプルがGithubで公開されています。私はDLしてないので詳細の中身がわからないのですが、公式のもののほうが絶対に良いので、NCMBの学習はしたくないから実装だけしたいの…という方はそちらをDLして使用してください。

今回は、自分でコードの構成を考えてみるトレーニングのために自分で作ったものなので、

初心者が作ったけど動いたよっ!というコードを赤裸々公開していますので実際になにか不都合が起きても責任取れません。。

また、本記事時点では、既存のユーザーネームとパスワードを入力してもログインができない、新規登録のみの実装になっています。ブログという形を取った備忘録なのでご了承くださいませ。

前記事で作ったTitleManager.csを以下のように修正します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using NCMB;
using TMPro;
using UnityEditor.UIElements;

public class TitleManager : MonoBehaviour
{
    [SerializeField]
    public GameObject SignupPanel;
    [SerializeField]
    public GameObject LoginedPanel;
    [SerializeField]
    public TMP_InputField UserNameField;
    [SerializeField]
    public TMP_InputField PassWordField;
    [SerializeField]
    public TextMeshProUGUI HelloText;
    [SerializeField]
    public TextMeshProUGUI SevedDeviceText;
    [SerializeField]
    public GameObject TitleManagerObject;

    public static string Username;
    public static string Password;

    void Start()
    {
        SignupPanel.SetActive(false);
        LoginedPanel.SetActive(false);

        PlayerPrefs.GetString("savedeviceName");
        if (PlayerPrefs.GetString("savedeviceName") != "")
        {//端末にすでにデータ保存されていれば、オートログインする
            Username = PlayerPrefs.GetString("savedeviceName");
            Password = PlayerPrefs.GetString("savedevicePass");
            Autologin();
        }
    }

    //最初のSTARTButtonを押したあとの処理
    //パネル表示だけする
    public void OnStartClick()
    {
        SignupPanel.SetActive(true);
    }

    //SignUpのOKButtonを押したあとの処理
    //インプットフィールドに文字列が入力されたかの確認をする
    public void OnSignUpOKClick()
    {
        //インプットフィールドの値を各stringへ代入
        Username = UserNameField.text.ToString();
        Password = PassWordField.text.ToString();

        if (Username != "" && Password != "")
        {//どちらも入力したら登録可能かチェック
            OnSignUpCheck();
        }
        else
        {//どちらかNullのままだと次へ進まない
            return;
        }
    }

    //ユーザー登録できるかチェック
    //ここからNCMB機能を使う
    public void OnSignUpCheck()
    {
        //インスタンス
        NCMBUser user = new NCMBUser();

        //NCMBUserクラスのnew userが持っているUserNameとPasswordへ入力した値を代入
        user.UserName = Username;
        user.Password = Password;

        //サインアップ
        user.SignUpAsync((NCMBException e) =>
        {
            if (e != null)
            {
                Debug.Log("登録できませんでした");
                Debug.Log(e.ErrorMessage);
                return;
            }
            else
            {  Debug.Log("新規登録に成功しました");
                HelloText.text = "Hello : " + Username;
                LoginedPanel.SetActive(true);
                SignupPanel.SetActive(false);

                NCMBUser.LogInAsync(Username, Password,
                (NCMBException e) =>
                {
                    if (e != null)
                    {
                        UnityEngine.Debug.Log(e.ErrorMessage);
                    }
                    else
                    {
                        PlayerPrefs.SetString("savedeviceName", Username);
                        PlayerPrefs.SetString("savedevicePass", Password);
                        SevedDeviceText.text = "端末にデータを保存しました : " + Username;
                        //Scene移動(TitleManagerは破棄しない)
                        DontDestroyOnLoad(TitleManagerObject);
                    }

                });
            }
        });
    }

    //端末にすでにデータ保存されていれば、オートログインする
    public void Autologin()
    {
        //コンストラクタ
        NCMBUser user = new NCMBUser();
        NCMBUser.LogInAsync(Username, Password,
                (NCMBException e) =>
                {
                    if (e != null)
                    {
                        UnityEngine.Debug.Log(e.ErrorMessage);
                    }
                    else
                    {
                        SevedDeviceText.text = "AutoLoginSuccess : " + Username;
HelloText.text = "Hello : " + Username;                         SignupPanel.SetActive(false); LoginedPanel.SetActive(true); //Scene移動(TitleManagerは破棄しない) DontDestroyOnLoad(TitleManagerObject); } }); } //Scene移動(最後のHelloButton) public void ChangeScene() { } }

 

前記事から新たに作ったのはこちらです。サインアップパネルを流用してるだけ。

usernameとpasswordを入力してユーザー登録が成功すると、上記のパネルが現れます。すでに端末にデータがあれば、起動直後にこのパネルが現れます。端末にデータが無い場合は、前の記事で作った新規登録のパネルが表示されます。

 

新規登録画面に移る起動Ver(初回起動)

 

起動と同時にログインされる起動Ver(登録完了以降の起動)

さりげなく左下の文字が、登録後だと"UserDataSeved"になっていて、

オートログイン後だと"AutoLoginSuccess"になっています。(なんかそれっぽいかなと思って)

 

記事のサンプルを使用してみる超初学者の方はコードで[SerializeField]されてるGameObjectをアタッチするのを忘れずに。

 

動作確認で何度もユーザー登録したのであっという間にユーザー6人に増えました。

 

次回はタイトル画面に飽きてしまったので、既存のユーザー名とパスワードでログインする機能を実装する部分よりも先に進みます。

日本史の学習アプリなので、ざっくり日本史で押さえておきたいポイントを表にしました。(書き殴り段階なので多少の前後あり)この表を基に学習コンテンツを作っていきます。

 

雑談 日本史の勉強の仕方

個人的に日本史で大事なキーワードだと思ってるのが

蘇我氏と聖徳太子・仏教・律令制度〜荘園制度・承久の乱・朝廷衰退・廃藩置県・日清日露戦争・世界大戦・東京裁判です。

上記のキーワードがだとしたら、これを理解していくと日本史が線として繋がっていくと思います。

 

超ざっくり日本史を10行でまとめる

自然神崇拝だった邪馬台国

仏教伝来とそれを促進し統率を図った蘇我氏と聖徳太子

権力を握ったはいいけれど維持の仕方がわからず廃れた院政と荘園制度

我慢できなくなった人々が源氏を担ぎ上げて武力で下剋上した承久の乱

朝廷がお飾りになって武力にものいわす戦国時代

幕府が倒れて政府が領地を全部とりあげ勝手に再分配した廃藩置県

重工業の発展と海外留学をした人たちの知識を持って領土を広げようとした日清戦争からの日露戦争

諸外国との外交に悩み、戦地に出た軍隊も言うことを聞かないので、もつれにもつれて二度の世界大戦

そして東京裁判

戦後復興しながらも、いまだに敗戦国日本

という感じだと思います。多分。卒業式風に声に出すと覚えるかも