我正在使用Unity和vuforia for Android来创建AR应用程序(项目)。我有一个3d文本,我想改变它对应于用户位置的位置。
现在,我可以获取他的位置和更新,我可以使用OnGUI功能在Gui标签上显示它。
3D文本是一个预制件,所以每次用户到达新位置时我都必须实例化它吗?
三维文字应该只出现一次(取决于他当前的位置)。这意味着,我必须销毁第一个,以前实例化的文本或者它是否会被覆盖?
最后,我应该在哪里编写实例化代码?我的意思是,在Update()函数上?开始()?所以只有在地点变化而不是所有时间才能运行。
我目前熟悉Unity,我正在试图弄清楚它是如何工作的。 问我是否想了解更多信息。
提前感谢您的时间和答案!
答案 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知道你是否需要我解释一下。