視線の注視時間を後から入力する① テキストに入力した数字を受け取ったりいろいろする

指定した注視時間だけ見ると

音楽が鳴るように変えることが出来ました。

 

今度は、この時間を

起動後に指定できるようにしたい。

 

ということでやってみます。

 

・・・

 

あちらこちらのサイトを参考にしました。

 

【Unity C#】ボタンを押して入力テキストを表示させる (futabazemi.net)

 

UnityでInputFieldのテキストを取得する – Pelican Philosophy (peliphilo.net)

 

unityでInputFieldを使って数字を入力プログラム... - Yahoo!知恵袋

 

【Unity】全てのInputFieldが空でなければボタンを表示する (suzukaprogrammer.com)

 

 

このようになりました。

例えば、2.6とtextfieldに入力してボタンを押すと、

上のtextに文字が表示されます。

 

この後、ボタンを再度押したら

スタートできるようにしたいと思います。

 

また

空っぽでボタンをおしたら

入力を促すテキストを表示させて、

このときはボタンを押せないようにしようと思います。

 

ボタンに表示されている文字の切り替えをしました。

【Unity】Buttonを押した時にテキストを切り替える方法 - テクノモンキー(サブ) (hateblo.jp)

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

 

後、ボタンの色の変化はこちらが一目瞭然でした。

【Unity】【uGUI】状態によってボタンの色を変える - ヒナタ製作所 (hatenablog.com)

 

 

注視時間を入れなければボタンを押せなくしたかったので

それは↓こちらで一発でした!

【Unity】ボタンを非活性にする方法 | Unity Note (naoya-ono.com)

 

 

 

新しいことをいろいろやったので詳しく残します。

 

Hierarchyに加えたのは

UIの

・InputField

・Text

・Button

 

例えばTextならこうやって選びます。

Textという言葉をコード上いろいろ使うので

(ボタンの文字もボタンのtextだし・・・)

私はゴチャゴチャになってしまうので

オブジェクト名を大きく変えて

「mojihyoji」にしました。

 

Assetsに

 

を作り、

HierarchyのInputFieldにくっつけました。

 

中身はこうです。

 

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

public class InputText : MonoBehaviour
{
    //ボタンを押せるようにしたり押せ無くしたり、ボタンの文字を変えたりする
    public GameObject button;
   

  public float num;
    

    //InputFieldの上のtextに何を表示するか
    public Text textarea; //テキストエリア
                     
    Text buttonText = null;  // ボタンのテキスト

    void Start()
    {

        button = GameObject.Find("Button");
     
        // ボタンのテキストコンポーネントをキャッシュ
        buttonText = button.GetComponentInChildren<Text>();
        
        //最初はボタン押せなくしてある
        button.GetComponentInChildren<Text>().text = "入力するまで\n押せません";
        button.GetComponent<Button>().interactable = false;

        //最初に入力を促す文字を表示
        textarea.text = "注視時間を入力してね";

    }

 

 

    //InputFieldに文字を入れるたびに呼び出される
    public void ValueChange(string text)           //InputFieldに入れた文字を text として string型で扱っていく

    {

        if (text != "")     //もしInputFieldが空でないなら
        {
            //ボタンをアクティブにして表示を変える
            button.GetComponent<Button>().interactable = true;
            button.GetComponentInChildren<Text>().text = "これでOK";
           
            //後で入力したtextをfloat型の数値として使いたい
            num = float.Parse(text);

            //文字表示を以下のように変える
            textarea.text = text + "秒見てね";

            Debug.Log("数字" + num);
        }
        else    //もしInputFieldが空なら
        {

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

            //ボタンを押せなくする
            button.GetComponentInChildren<Text>().text = "入力するまで\n押せません";
            button.GetComponent<Button>().interactable = false;

            
        }
    }


    public void Buttonoshita()
    {
        Debug.Log("入力数字はこれ" + num);
        Debug.Log("1を足すと" + (num+1));
    }
  }

 

HierarchyでInputFieldを選び、

inspectorを見ます。

 

ここ、変えました。

途中でいろいろ触ったときに、

全然うまくいかなくなってよく見たら

 

↓これを選んでました。これは間違い。

 

 

こっちが正しい

 

参考サイト様にちゃんと

こっちと分かるように書いてくれていたのに

触っているうちに思い込みでダメな方を選んでました。

 

後、スクリプトのとこはこうなってます。

 

 

 

今度はボタンです。

 

inspectorは

 

On Click()のところは

ボタンを押したときに


    public void Buttonoshita()
    {
        Debug.Log("入力数字はこれ" + num);
        Debug.Log("1を足すと" + (num+1));
    }

 

が働くようにしています。

ちゃんと数字で取得できているか確認の為足し算をしています。

成功していました。

 

colorのところは好きに入れました。

触らなくても良いのですが、色が変わった方が分かりやすそうなので。

 

一旦、ここまで。