視線入力アプリをUnityで作る②

以前作ったときのプログラムを全部貼り付けます。

英語が弱いので、変数とかもichiziteishiとかローマ字です。

 

 

赤字のところは、自分がつけたScriptの名前に変更。

 

緑字のところは、目をそらしたときに音を一時停止したいなら

//Pause();の前の「//」を消してもらえば良いのですが、

目をそらすたびに音が止まって自分でテストしてもしんどかった。

 

使い方は、見たら画面が赤くなって、目をそらしたら青くなる。

赤くなったら音楽が鳴る。

目をそらしたときに、数字の1を押したら一時停止、もう一度画面を見たら途中から再生。

数字の2を押したら停止で、もう一度画面を見たら最初から再生。です。

 

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Tobii.Gaming; //ライブラリの追加


public class GazeTarget : MonoBehaviour
{
    public AudioClip audioClip;
    private AudioSource audioSource;
    int ichiziteishi;
 

    //注視情報
    private GazeAware gazeAware;

 

 

    void Start()
    {
        audioSource = this.GetComponent<AudioSource>();

        


        //注視情報の取得
        gazeAware = GetComponent<GazeAware>();

        //一時停止が押されたかどうかを見るための変数。最初と再生中は1.一時停止中は2
        ichiziteishi = 1;

    }


   
        // Update is called once per frame
        void Update()
    {
        // マウスの左ボタンを推した場合も再生


        //オブジェクトを注視していたらTrue
        bool flg = gazeAware.HasGazeFocus;

        //注視していたり、マウスが左クリックされたら

        if (flg || Input.GetMouseButtonDown(0))
        {
            //注視していたら赤色に
            gameObject.GetComponent<Renderer>().material.color = Color.red;

 

            if (!audioSource.isPlaying)  //再生中で無いなら
            {

                //一時停止関数がもし2(一時停止中)なら
                if (ichiziteishi == 2)
                {
                    //再開してください(同時にichiziteisi変数は1になる)
                    UnPause();

                }

                //一時停止関数がもし1(一時停止中でない(起動したところだったり、停止中だったり))なら再生する。
                else
                {
                    Play(audioClip);
                }

            }
           

        }

 

        //注視して無かったり、マウス左クリックされてなかったりしたら
        else
        {
            //注視していなければ青色に
            gameObject.GetComponent<Renderer>().material.color = Color.blue;
            //注視がそれただけでは一時停止にはしていない。視線がそれることはよくあると思うので。
            //一時停止にしたいならPauseを入れたら可能。

            //改訂として目をそらしたら止めるようにする
            //Pause();

        }

 


        // 停止
        
            if (audioSource.isPlaying)  //再生中なら
        {
           
                           

            //注視がそれているときのみ有効。テンキーの「2」を押して離したら停止
            if (Input.GetKeyUp(KeyCode.Keypad2))
            {
                
                Stop();


            }
                

        }
            
        

       

        // 注視がそれているときのみ有効。一時停止
        if (audioSource.isPlaying)  //再生中なら
        {

            //テンキーの「1」を押して離したら一時停止し、ichiziteishi変数を2に。
            if (Input.GetKeyUp(KeyCode.Keypad1))
            {
                Pause();

            }
        }

        // 再開
        if (!audioSource.isPlaying)  //停止中なら
        {

            //もう一回、注視したり左クリックしたりしたら再開し、ichiziteishi変数を1に。
            if (flg || Input.GetMouseButtonDown(0))
            {

                UnPause();


            }
        }

        if (Input.GetKey(KeyCode.Escape))
        {
            Application.Quit();
        }

    }


   
              

 

 

    //再生、一時停止、停止、再開、完全に停止について

    // 再生 Play と、入力したら一回だけ再生
    private void Play(AudioClip audi)
    {
        audioSource.PlayOneShot(audi);
    }

    //  一時停止 Pauseと、入力したらichiziteishi変数に2を入れて、一時停止
    private void Pause()
    {
        ichiziteishi = 2;
        audioSource.Pause();
    }

    // 停止  Stopと、入力したら停止
    private void Stop()
    {
        audioSource.Stop();
    }

    // 再開 UnPause と、入力したらichiziteishi変数に1を入れて、再開

    private void UnPause()
    {
        ichiziteishi = 1;
        audioSource.UnPause();
    }

    }

 

Assetsの中身です。

 

「Tobii Unity SDK for Desktop」をダウンロードして出来た「Tobii」フォルダ

(という名前でダウンロードされるものだったか、これは自分がつけた名前だったか

 何も覚えてません・・・。なんせダウンロードされたもの)

 

をAssetsの中に入れています。以下の手順で入れられます。

 

otoというのは、流したい音楽です。

mp3で作った気がします。

mp3ファイルを左クリックしたままドラッグしてくればAssetsの中に入れられます。

 

左端のHierarchyというところはこうなっていました。

Cubeを作って、それを画面いっぱいの大きさにしていました。

Cubeが青色(見てないとき)、赤色(見たとき)に色が変わるようです。

 

Directional Lightが無いと、画面が暗かったので、下の画像のLightというところから

クリックしたら自動で入り、自動的に明るくしてくれました。

 

(最初、新しいプロジェクトで同じものを作れるか試したとき、

 Create Emptyでも行けるんじゃ・・・?と思ったけど全然動かず、

 Cubeの必要性に気付きました。1年以上経つと自分の作ったアプリも赤の他人の

 初見のアプリのように見えます。)

←Cubeとかの作り方はこう

 

 

そして、作成されたCubeを選択した状態で、右端を見たら

こうなっていました。

Gaze Aware と GazeTarget(Script) と Audio Source は後から追加したものだったと

思います。

↑この一番下のAdd Componentをクリックして、検索窓に

Gaze Awareなどと入力したら出てきます。

 

ただし、GazeTargetだけは、NewScriptを選んで作ります。

他の名前でをつけても構わないです。

GazeAwareがTobiiのSDKを入れて使う視線入力に必要なものだと思います。

だから、TobiiのSDK入れてなかったら選べないんじゃなかったかな・・・

 

Gaze Target のAudio Clipと、

Audio Source の一番上のAudioClipに、自分のmp3の名前が入っているのは、

Assets内のmp3を左クリックでつかんで、

AudioClipまで持って行って、名前が表示されているところで離すと入ります。

 

 

とりあえず②はここまで。

③に続けます。