0

当我注视一个物体时,我有这个命中信息。该物体在凝视时出现,但在视线移开时消失。我希望对象在观看后显示 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);                    
}
4

1 回答 1

1

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

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

  1. 缓存“GUIv2”对象,这样您就不必每帧都“找到”它。
  2. 您不需要更改 localScale 值。只需使用 SetActive。
  3. 不要timeLeft每次都初始化变量。它永远不会达到0。

以下是一些示例代码,应该可以实现您正在寻找的内容:

    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);
        }
    }
于 2016-06-15T18:58:20.530 回答