Unity - 如何显示/隐藏3D文本

时间:2015-09-01 12:58:39

标签: c# unity3d

如何在一定时间后显示3D文本,然后在一定时间后隐藏

我的尝试

public Text text_tap;

GameObject.Find("3dtext").active = true; // first try but it dosnt work

if (Time.time > 5) {

           // second try but it I cant attach my 3d text to my script
            text_tap.gameObject.SetActive(true);

        }

我无法在3D documentation

中找到任何内容

3 个答案:

答案 0 :(得分:3)

我不知道确切的问题,但你有一些提示:

如果您在场景中搜索已停用的游戏对象,则无法找到它。 Gameobject必须是活动的,GameObject.Find()函数才能工作。你可以做的最简单的事情是保持GameObject激活,如果初始状态是隐藏它,只需将它隐藏在Awake()中。

其次,您似乎正在尝试访问TextMesh对象 但是你在代码中引用了一个Text对象。 如果找到GameObject并请求GO不包含的Component,则返回null。

最后激活/取消激活游戏对象(GO)的API是

myGameobject.SetActive(真)

您正在使用的那个(myGameobject.active = true)已弃用

试试这个例子,它应该有效:

public YourMonoBehaviour : MonoBehaviour
{
  public TextMesh text_tap;

  float awakeTime;

  void Awake()
  {
    // Remember to activate the GO 3dtext in the scene! 
    text_tap = GameObject.Find("3dtext").GetComponent<TextMesh>():

    awakeTime = Time.time
  }


   void Update()
   {
     if ((Time.time - awakeTime) > 5) 
     {

       // second try but it I cant attach my 3d text to my script
       text_tap.gameObject.SetActive(true);

     }

   }
}

答案 1 :(得分:1)

如果您需要“在延迟后做某事”,那么您正在谈论Coroutines

检查Time.time只会检查游戏是否已运行x时间,并且在Unity中使用Thread.Sleep会导致它延迟,因为您导致Update或类似锁定而不是返回。

相反,请使用

yield return WaitForSeconds(5);
text_tap.gameObject.SetActive(false);

作为另一个警告,此代码假定目标对象与托管此脚本的目标对象不同gameObject,因为协同程序不在非活动对象上执行。同样,禁用transofrm.parent的祖先(通过场景层次结构或gameObject)会禁用gameObject本身。

如果是这种情况,请通过gameObject字段获取呈现3d文本的组件并将其禁用,而不是整个enabled

答案 2 :(得分:1)

你也可以使用Invoke()来实现。如上所述,注意文本必须通过其他方式设置,而不是查找原因,如果它不活动,它将无法找到它。

void Start() //or any event
{
   Invoke("ShowTextTap", 5f);//invoke after 5 seconds
}
void ShowTextTap()
{
    text_tap.gameObject.SetActive(true);
    //then remove it
    Invoke("DisableTextTap", 5f);
}
void DisableTextTap()
{
    text_tap.gameObject.SetActive(false);
}