視線の注視時間を後から入力する④ やっとセーブできた
保存まであと一歩っぽいのですが、、、
一度、よく分からないまま
ビルド後も値を保存できた瞬間があったのですが、
他を直していると出来なくなってしまいました。
↓こちらとか分かりやすいのですが
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だと半分、つまり中心が基準。
割合なんですね。
今日はここまで。
これが出来たら、もしかしたら
サイズや位置の保存も夢ではない気がします。