視線入力アプリを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まで持って行って、名前が表示されているところで離すと入ります。
とりあえず②はここまで。
③に続けます。