0

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

现在,我可以得到他的位置和更新,我可以使用 OnGUI 函数在 Gui 标签上显示它。

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

3d 文本应该只出现一次(取决于他当前的位置)。这意味着,我必须首先销毁以前实例化的文本,还是会被覆盖?

最后,我应该在哪里编写实例化代码?我的意思是,在 Update() 函数上?开始()?因此仅在位置更改时运行,而不是一直运行。

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

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

4

1 回答 1

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 实例。我希望这会有所帮助……它可能需要做一些工作,但我现在得跑了。让我知道你是否需要我再解释一下。

于 2012-09-13T12:42:12.360 回答