視線入力アプリをUnityで作る⑤ 試行錯誤(まだうまく行かない)

④では、新規プロジェクトを作って、フォルダ内のファイルを入れ替えることで

流れる音楽を変えることが出来ました。

 

ここから、②の「視線を向けたら音楽が鳴る」プログラムの「音楽」部分を、

今は、組み込まれている音楽が鳴っているところを

フォルダ内の音楽ファイルに変更するようにします。

 

しかし、壁に当たっています。

 

すごく長いのですが、コードを全部載せています。

 

一番よく分からないのが、

↓↓↓

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

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

            audioSource.Play();
           

        }

 

ここに、audioSource.Play()を入れないと、見たとき(画面が赤の時)に再生されず、

目をそらしたときに再生されてしまうということ。

 

逆の気がしてならない。

 

それと、目をそらしたらすぐに止まってしまう。

目をそらしても鳴らし続けたい。

 

まだ試行錯誤が必要です。

↓失敗しているコード

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


public class play : MonoBehaviour
{
    public AudioClip audioClip;
    private AudioSource audioSource;

    //注視情報
    private GazeAware gazeAware;

    //停止中か再生中かなど
    int ichiziteishi;

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

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

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

        
    }



    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();

            audioSource.Play();
           

        }


        // 停止

        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();
        }

    }




    private IEnumerator Connect()
    {


        string url = "C:/sound/5.wav";

        WWW www = new WWW(url);
        yield return www;

        audioSource = GetComponent<AudioSource>();
        audioSource.clip = www.GetAudioClip(false, true);//二つ目の引数がturueで読込中の再生可能
       // audioSource.Play();                                                 //audioSource.Play();

    }


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

    // 再生 Play と、入力したら一回だけ再生
    private void Play(AudioClip audi)
        {
            audioSource.PlayOneShot(audi);
            //この再生だと、連打したら音が重なる→ audioSource.Play();
    }


        //  一時停止 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();
        }

}