視線入力アプリをUnityで作る⑥ 試行錯誤(成功)

前回、記事を書いてからコードを見直すと、何時間もにらめっこしてても 分からなかったことが急に見えてきました。

大きく変えたところは、

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

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

                }

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


            }

下から二つ目のaudioSource.Play()をここに持ってきました。

Play(audioClip);で再生が出来てないことに全然気づいていなかった。 いろいろ仕様が変わったんだから、audioClipは関係ない。

なので、最初の方にあった

public AudioClip audioClip;

も消しました。

後、下の方の

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

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

↑この再生の部分は全部、コメントにしました。 消さないのは、なんとなく将来いることになったときに参考に出来たら良いなと言うことでおいてます。

audioSource.PlayOneShot(audi);で無くなったので、視線を何度もそらしては見て、そらしては見て、、、 だと、何重にも再生されないか心配でしたが、大丈夫でした。

理由は分かりませんが、多分、www.GetAudioClip はそういう仕様なんだろうぐらいの 合ってるのか間違ってるのか分からない理解で今のところ済ませています。

そのうち、分かる日も来るでしょう。。。

それと、Cubeの Inspectorは以下を追加しました。 NewScriptの名前を今回はplayにしています。


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


public class play : MonoBehaviour
{
 
    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
                {
                    
                    audioSource.Play();
                   // 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();
        }

    }




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

    }


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

    /*
    // 再生 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();
        }


   




}