視線の注視時間を後から入力する④ やっとセーブできた

保存まであと一歩っぽいのですが、、、

一度、よく分からないまま

ビルド後も値を保存できた瞬間があったのですが、

 

他を直していると出来なくなってしまいました。

 

↓こちらとか分かりやすいのですが

Unity - PlayerPrefs:変数を保存する - - ひとりでのアプリ開発 - fineの備忘録 - (hatenablog.com)

 

・・・

 

ということで何時間経っただろう。

 

やっと出来ました。

 

【Unity入門】スコアを保存!コピペで終わるPlayerPrefsの実装方法 | 侍エンジニアブログ (sejuku.net)

こちらを参考に、一度

まっさらなプロジェクトを作って

動くことを確認して、それから

なんだかんだとして・・・

 

 

 

疲れたので該当部分のコードだけ貼ります。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UIを扱う

public class InputText : MonoBehaviour
{

    //文字エリアを非表示にするために必要
    public GameObject mojihyoji;
    public GameObject keyhelp;

    //視線入力がONになるまでの注視時間
    public float num;

    //スタート時か、数字を一回以上チェンジさせたか
    public int TimeChange = 0;

    //InputFieldの上に貼ってあるUIのtextに何を表示するか
    public Text textarea; //テキストエリア


    //前回の視線入力の時間をinputfieldに表示するのに必要
    private InputField inputFieldbox;

    //保存した数値
    //   public float hozon1;
    public float shisentimehozon;
  //  public float hozon3;


    void Start()
    {
        //まだ起動後は一度も数字を変えていない
        TimeChange = 0;

        //ロードする
        shisentimehozon = PlayerPrefs.GetFloat("shisentimehozon", 0);

        //   hozon1 = PlayerPrefs.GetFloat("hozo1", 0);
        //   hozon3 = PlayerPrefs.GetFloat("hozon3", 0);


        //Debug.Log("hozon1は" + hozon1);
          Debug.Log("shisentimehozonは" + shisentimehozon);
        //Debug.Log("hozon3は" + hozon3);

        //ロードした値をtextに表示させる
        textarea.text = shisentimehozon + "秒、見てね";

        //ロードした値をnumに入れる
        num = shisentimehozon;

        //前の値を表示する
        string strnum = num.ToString();     //numはfloatなので、stringに変える必要がある

        inputFieldbox = GetComponent<InputField>();
        inputFieldbox.text = strnum;

        //前の値を表示する


        //文字エリアを非表示にするために必要
        mojihyoji = GameObject.Find("mojihyoji");
        keyhelp = GameObject.Find("keyhelp");
    }

    

    //InputFieldに文字を入れるたびに呼び出される
  
    public void ValueChange(string text)           //InputFieldに入れた文字を text として string型で扱っていく
    {
        //数字を一度でも買えたら1にする
        TimeChange = 1;

        if (TimeChange == 1)
        {

            if (text != "")     //もしInputFieldが空でないなら
            {

                //後で入力したtextをfloat型の数値として使いたい
                //こうすると予想外の入力にもクラッシュしない
                float.TryParse(text, out num);
                Debug.Log($"nummitenai: {num}");


                //↓これでstringをfloatに変換すると、例えば小数点をいきなり入力すると落ちてしまった
                //num = float.Parse(text);

                if (num <= 0)
                {
                    //文字表示を以下のように変える
                    textarea.text = "0より大きい数を入れてね";

                    /*
                    Debug.Log("数字" + num);
                    PlayerPrefs.SetFloat("hozo1", num);
                    PlayerPrefs.Save();
                    */


                }
                else if (num > 0)
                {
                    //文字表示を以下のように変える
                    textarea.text = text + "秒、見てね";
                    hozon();
                


                }

                else
                {
                    //文字表示を以下のように変える
                    textarea.text = "0より大きい数を入れてね";

                    /*
                    Debug.Log("数字" + num);
                    // スコアを保存
                    PlayerPrefs.SetFloat("hozo3", num);
                    PlayerPrefs.Save();
                    */
                }

 

            }
            else    //もしInputFieldが空なら
            {

                textarea.text = "注視時間を入力してね";

                /*
                Debug.Log("数字" + num);
                */

            }
        }

        
    }


    private void hozon()
    {
        // スコアを保存
        PlayerPrefs.SetFloat("shisentimehozon", num);
        PlayerPrefs.Save();

    }

   

   void Update()
    {

   

        if (Input.GetKeyDown(KeyCode.Y))
        {
            if (transform.localScale == Vector3.one)
            {
                // 非表示
                transform.localScale = Vector3.zero;
                mojihyoji.transform.localScale = Vector3.zero;

            }
            else
            {
                transform.localScale = Vector3.one;
                mojihyoji.transform.localScale = Vector3.one;
            }
        }

 

        if (Input.GetKeyDown(KeyCode.H))
        {
            if (keyhelp.transform.localScale == Vector3.one)
            {
                // 非表示
                keyhelp.transform.localScale = Vector3.zero;

            }
            else
            {
                keyhelp.transform.localScale = Vector3.one;
            }
        }

 

 

    }
}

 

 

該当しそうなところを赤にしましたが、

半分、脳が休んでいるので

抜けやらいろいろあるかも知れません。

 

赤で囲んだところがInputFieldです。

このinspectorは

 

こうです。

多分、Mojihyojiのとこは何も入れてなくても良いような気が・・・。

でも壊れると嫌なのでこのままにしています。

 

テキストなどは配置しただけです。

Hierarchyはこうです。

keyhelpは左上の長い文です。

kaenaimohihyojimitenaiは右下の二行ぐらいの文です。

 

mojihyozi が 左側のInputFieldの上に表示されており、

入力内容に合わせて表示が変わります。

 

mohihyozimitenaiは右のInputFieldの上の表示です。

 

 

今回、配置も可能な範囲で整えてみました。

 

[Unity]直感的にわかりにくいアンカーの仕組みを徹底解説 | hirokuma.blog

 

こちらが分かりやすかったです。

Pivotのことがよく分かったのが特にありがたかったです。

 

 

keyhelpのinspectorです。

アンカーを左上にしています。

Pivotでxを0にして、文の左端を基準に

yが1で、右端が基準です。

 

尚、0.5だと半分、つまり中心が基準。

割合なんですね。

 

今日はここまで。

 

これが出来たら、もしかしたら

サイズや位置の保存も夢ではない気がします。