Unity 3D文本:更新位置更改位置

时间:2012-09-13 10:21:14

标签: android unity3d

我正在使用Unity和vuforia for Android来创建AR应用程序(项目)。我有一个3d文本,我想改变它对应于用户位置的位置。

现在,我可以获取他的位置和更新,我可以使用OnGUI功能在Gui标签上显示它。

3D文本是一个预制件,所以每次用户到达新位置时我都必须实例化它吗?

三维文字应该只出现一次(取决于他当前的位置)。这意味着,我必须销毁第一个,以前实例化的文本或者它是否会被覆盖?

最后,我应该在哪里编写实例化代码?我的意思是,在Update()函数上?开始()?所以只有在地点变化而不是所有时间才能运行。

我目前熟悉Unity,我正在试图弄清楚它是如何工作的。 问我是否想了解更多信息。

提前感谢您的时间和答案!

1 个答案:

答案 0 :(得分:1)

取决于您的项目设置,可能还有其他方法可以做到这一点,但我建议通过网格渲染器隐藏3D文本。在您的代码中,如果自上次更新后位置发生变化,您需要检查更新功能。你如何做到这一点是通过创建两个变量:一个用于当前位置,一个用于上一次更新调用的位置。所以这里的秘诀是两个功能:Update和LateUpdate。

这是一个例子

#pragma strict
@script ExecuteInEditMode;

var curPos : Vector3;
var lastPos : Vector3;
var timeToWait : float = 2.0;
var shwoing : boolean;

function Start()
{
    ShowText(false);
}

function Update()
{
    // check if our current position is the same as our last position
    if(lastPos != curPos && !showing)
    {
        ShowText(true);     // Show the 3d text
    }

    if(lastPos == curPos && showing)
    {
        ShowText(false);    // Don't show the text
    }
}

function LateUpdate()
{
    lastPos = curPos;   // change our last Positon to our current position
}

function ShowText(state : boolean)
{
    renderer.enabled = state;    // enable or disable the renderer
    showing = true;              // variable to tell to keep showing text
    yield WaitForSeconds(timeToWait);   // wait a few seconds before changing the state
    showing = false;             // tell update to not show text
}

以这种方式做事你不必面对清理场景的麻烦,因为你只有3DText的一个实例要处理。我希望这有帮助...它可能需要一点点的工作,但我现在必须运行。 Lemme知道你是否需要我解释一下。