画像の背景を消してみる② 注視時に画像をすこし透明にする
すごい勘違いで時間を消費しました。
この犬の画像の位置やいろんなものはimage1.csというスクリプトで決めています。
そんな名前にしてしまったものだから、この画像は
UI→imageだと思い込んで調べてしまっていました。
いくら調べたようにやっても全然色が変わらない。
20分ぐらい経ってやっと気づきました。
これ、Cubeです。
Cubeに貼りつけてるんです。
なんでそうしたのか、今となってはもう思い出せませんが、
確かimageにしようとしたけど何かうまくいかなくて、
Cubeにしたような気がします。
最初の方の記事には書いてあるかも知れません。
背景も画像も
Cubeなんだから、背景が注視したら色が変わるのと同じコードを使いまわせました。
試しに Pキーを押したら色が薄くなるようにしました。
gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.5f);
pキーなので、画像を標準の位置に戻すキーだから背景が出てきてしまいましたが、
少し薄くはなりました。
これぐらいで良いかなと思います。
では、Pキーに置いていたコードを削除して、以下のように
書き直しました。
image1.csでは無くPlay.csに書きました。
だいぶ前に作ったスクリプトなので、該当箇所を全部載せます。
加えたのは赤の部分です。
public void keyoshita()
{
//オブジェクトを注視していたらTrue
bool flg = gazeAware.HasGazeFocus;
//このオブジェクト(back1Cu)を見る、もしくはその上に乗ってるimage1を見たら
if (flg || ima1Cu.GetComponent<image1>().gazeAware.HasGazeFocus)
{
//////+++++++++++++++注視する時間を変えるために必要
notmiterutime = 0;
//見ている時間をカウント
miterutime += Time.deltaTime; //毎フレームの時間を加算.
// Debug.Log("見てますTime : " + miterutime);
notmiterutime = 0;
//////+++++++++++++++注視する時間を変えるために必要
}
else
{
//みていない時間をカウント
notmiterutime += Time.deltaTime;
// Debug.Log("見てませんTime : " + notmiterutime);
}
if (notmiterutime == 0) //見ているあいだ (見ていない時間がカウントされていない)
{
if (miterutime < inputtext.num && miterutime != 0) //見ている時間が規定時間を超えてない
{
//+++++++++++++++++++++++++++++++++++++++++++++@@
// Miteimasu = 1; //見ているが時間が足りてない
//+++++++++++++++++++++++++++++++++++++++++++++@@
gameObject.GetComponent<Renderer>().material.color = Color.magenta;
if (Zoshita == 0)
{
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.7f);
}
}
else if (miterutime >= inputtext.num) //見ている時間が規定時間を超えた
{
//+++++++++++++++++++++++++++++++++++++++++++++@@
Miteimasu = 4; //見ていると判断されている
//+++++++++++++++++++++++++++++++++++++++++++++@@
gameObject.GetComponent<Renderer>().material.color = Color.red;
if (Zoshita == 0)
{
// 非表示
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
}
//見ているタイムをリセット
miterutime = 0;
}
}
else if (notmiterutime > mitenaiinputtext.nummitenai) //見ていない時間が規定時間を超えたら
{
//+++++++++++++++++++++++++++++++++++++++++++++@@
Miteimasu = 0; //見てない
//+++++++++++++++++++++++++++++++++++++++++++++@@
gameObject.GetComponent<Renderer>().material.color = Color.blue;
if (Zoshita == 0)
{
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
}
//見ているタイムをリセット
miterutime = 0;
}
else //見ていない時間が規定時間を超えていないなら
{
//+++++++++++++++++++++++++++++++++++++++++++++@@
//Miteimasu = 2; //今見てないだけ
//+++++++++++++++++++++++++++++++++++++++++++++@@
gameObject.GetComponent<Renderer>().material.color = Color.magenta;
if (Zoshita == 0)
{
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.7f);
}
}
if (!audioSource.isPlaying && Miteimasu == 4) //再生中で無い、かつ Miteimasu が 4(規定時間以上見たとき)なら
{
//一時停止関数がもし2(一時停止中)なら
if (ichiziteishi == 2)
{
//再開してください(同時にichiziteisi変数は1になる)
UnPause();
miterutime = 0; //再生されるたびに、見ていた秒数をリセットする。
}
//一時停止関数がもし1(一時停止中でない(起動したところだったり、停止中だったり))なら再生する。
else
{
audioSource.Play();
miterutime = 0;
//++++playが再生されるときは、他のCubeの音は一時停止する++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
pl2.audioSource2.Pause();
pl3.audioSource3.Pause();
}
Miteimasu = 0;
}
// 停止
if (audioSource.isPlaying) //再生中なら
{
//注視がそれているときのみ有効。テンキーの「2」を押して離したら停止
if (Input.GetKeyUp(KeyCode.T))
{
Stop();
// miterutime = 0; //見た状態で停止キーを押すと、見たままであればすぐに再生される。ここでmiterutime をリセットすると、見続けているのに停止したら規定時間見ないと再生されず違和感があった。
}
}
// 注視がそれているときのみ有効。一時停止
if (audioSource.isPlaying) //再生中なら
{
//テンキーの「1」を押して離したら一時停止し、ichiziteishi変数を2に。
if (Input.GetKeyUp(KeyCode.I))
{
Pause();
}
}
// 再開
if (!audioSource.isPlaying) //停止中なら
{
//もう一回、注視したり左クリックしたりしたら再開し、ichiziteishi変数を1に。
// if (flg || Input.GetMouseButtonDown(0))
if (Miteimasu == 4) //元は if (flg) だった。
{
UnPause();
miterutime = 0;
}
Miteimasu = 0;
}
}
Zoshita は Zキーが押されて、背景が透明な時に0
もう一度Zキーが押されて、背景が透明では無い時に1になるintの変数です。
これは
void Update()の中で呼び出されています。
視線が入っても、背景が透明でないとき
(Zoshitaが1のとき)は画像は透明にはしません。
背景がマゼンダになってくれるので、見ているかどうか分かるからです。
背景があって透明になると見にくくなると言うのもあります。
背景がない(Zoshitaが0)ときにだけ、
注視したら画像が透明になるようにしています。
そして、
void Update()
の中に、
///////////////この背景をゼロに///////////
if (Input.GetKeyDown(KeyCode.Z))
{
if (Zoshita == 1)
{
// 非表示
transform.localScale = Vector3.zero;
Zoshita = 0;
}
else
{
this.transform.localScale = new Vector3(image1.xScale + 150, image1.yScale + 150, 1.0f);
Zoshita = 1;
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
}
Debug.Log("Zoshitaの値は" + Zoshita);
}
を入れています。
ima1Cu.gameObject.GetComponent<Renderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
が無いと、透明になったものがずっと透明のままになるので戻しています。
この後、修了時にZoshitaの値を保存するコードもつけました。
続く。