質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

427閲覧

オブジェクトを見た時間で反応させるには?

ehuronkon35

総合スコア33

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/08/29 07:55

オブジェクトを見た時間で反応させるには?

今FOVE0を用いて視線追跡をしています。
今はこのオブジェクトを一瞬でも見たら反応するようになっています。

したいことは、その中であるオブジェクトを1秒見たら反応するように設定したいです。

ただ視線でそのオブジェクトを通るだけで反応させず、1秒以上見ることで反応させられるプログラムを作りたいです。。

以下のスクリプトで見られた点が光るというものです。

C#

1 2using UnityEngine; 3 4public class FOVELookSample : MonoBehaviour { 5 public Light attachedLight; 6 public FoveInterfaceBase foveInterface; 7 8 private Collider my_collider; 9 private Material material; 10 private bool light_attached = false; 11 12 void Start() { 13 my_collider = GetComponent<Collider>(); 14 15 16 if (attachedLight) 17 { 18 light_attached = true; 19 attachedLight.enabled = false; 20 } 21 material = gameObject.GetComponent<Renderer>().material; 22 23 if (material == null) 24 gameObject.SetActive(false); 25 } 26 27 void Update () { 28 if (foveInterface.Gazecast(my_collider)) 29 { 30 material.EnableKeyword("_EMISSION"); 31 32 if (light_attached) 33 { 34 material.SetColor("_EmissionColor", attachedLight.color); 35 attachedLight.enabled = false; //ライトが点く 36 DynamicGI.SetEmissive(GetComponent<Renderer>(), attachedLight.color); 37 } 38 } 39 } 40} 41

よろしくお願いします。
自分はC#もUnityも初心者です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FOVEを持っておらず、多分こんな感じだろうかとの想像での案ですが、見つめ時間カウント用の変数を追加して、視線が当たっている間カウントダウンしていく...というのはどうでしょうか?

C#

1 public float GazingTime = 1.0f; // 見つめ時間...何秒見つめ続けると反応するかを設定する 2 private float currentGazingTime; // 見つめ時間カウント用のフィールド 3 private bool lightEnabled; // 現在ライトが点灯中かどうかを示すフィールド 4 5 void Update() 6 { 7 if (lightEnabled) 8 { 9 // もしライト点灯中の状態で... 10 if (!foveInterface.Gazecast(my_collider)) 11 { 12 // Gazecastがヒットしなかった場合、視線が外れたのでライトを消灯 13 lightEnabled = false; 14 currentGazingTime = GazingTime; 15 material.DisableKeyword("_EMISSION"); 16 17 if (light_attached) 18 { 19 material.SetColor("_EmissionColor", Color.black); 20 attachedLight.enabled = false; 21 DynamicGI.SetEmissive(GetComponent<Renderer>(), Color.black); 22 } 23 } 24 } 25 else 26 { 27 // もしライト消灯中の状態で... 28 if (foveInterface.Gazecast(my_collider)) 29 { 30 // Gazecastがヒットした場合... 31 32 // currentGazingTimeを経過時間分だけ減らす 33 currentGazingTime -= Time.deltaTime; 34 35 if (currentGazingTime <= 0.0f) 36 { 37 // currentGazingTimeが0以下になったら、見つめ続けてGazingTime秒以上経過したので、ライトを点灯する 38 lightEnabled = true; 39 material.EnableKeyword("_EMISSION"); 40 41 if (light_attached) 42 { 43 material.SetColor("_EmissionColor", attachedLight.color); 44 attachedLight.enabled = false; //ライトが点く 45 DynamicGI.SetEmissive(GetComponent<Renderer>(), attachedLight.color); 46 } 47 } 48 } 49 else 50 { 51 // Gazecastがヒットしなかった場合、視線が外れたのでcurrentGazingTimeをGazingTimeにリセット 52 currentGazingTime = GazingTime; 53 } 54 } 55 }

投稿2018/08/29 19:43

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ehuronkon35

2018/08/31 04:03

そのコードを参考にするとできました!! ありがとうございます!!助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問