在凝视Unity上显示对象

时间:2016-06-14 12:09:55

标签: c# hololens

当我凝视一个物体时,我有这个命中信息。凝视的时候会出现这个物体,但是当看向远处时会消失。我希望对象在看完之后显示10秒。我在正确的道路上吗?

float timeLeft = 10.0f;
timeLeft -= Time.deltaTime;
if (Hit == InfoCube)
{
    GameObject.Find("GUIv2").transform.localScale = new Vector3(0.02f, 0.2f, 0.8f) // Shows object
}
else if (timeLeft < 0)
{
    GameObject.Find("GUIv2").transform.localScale = new Vector3(0, 0, 0);
    GameObject.Find("GUIv2").SetActive(false);                    
}

1 个答案:

答案 0 :(得分:1)

此代码放在哪里?我假设它在Update()方法中。

无论如何,我可以看到代码存在一些问题。以下是我的建议:

  1. 缓存&#34; GUIv2&#34;对象,所以你不必发现&#34;它每一帧。
  2. 您不需要更改localScale值。只需使用SetActive。
  3. 每次都不要初始化timeLeft变量。它永远不会达到0。
  4. 这里有一些示例代码可以实现您正在寻找的内容:

        float timeLeft = 10f;
        bool isGazed;
        GameObject GUIv2;
        void Start()
        {
            GUIv2 = GameObject.Find("GUIv2");
        }
    
        void Update()
        {
            if (Hit == InfoCube)
            {
                if (!isGazed)
                {
                    // first frame where gaze was detected.
                    isGazed = true;
                    GUIv2.SetActive(true);
                }
                // Gaze on object.
                return;
            }
            if (Hit != InfoCube && isGazed)
            {
                // first frame where gaze was lost.
                isGazed = false;
                timeLeft = 10f;
                return;
            }
    
            timeLeft -= Time.deltaTime;
            if (timeLeft < 0)
            {
                GUIv2.SetActive(false);
            }
        }