0

unityとvuforia for Androidを使ってARアプリ(プロジェクト)を作成しています。3D テキストがあり、ユーザーの位置に対応する位置を変更したいと考えています。

現在、私は彼の位置と最新情報を取得でき、OnGUI 関数を使用して GUI ラベルに表示できます。

3d テキストはプレハブなので、ユーザーが新しい場所に移動するたびにインスタンス化する必要がありますか?

3D テキストは 1 回だけ表示されます (現在の場所によって異なります)。つまり、最初に以前にインスタンス化されたテキストを破棄する必要がありますか、それとも上書きされますか?

最後に、インスタンス化コードはどこに記述すればよいですか? つまり、Update() 関数で?始める()?そのため、常にではなく、場所が変更されたときにのみ実行されます。

私は現在 Unity に慣れてきており、それがどのように機能するかを理解しようとしています。さらに詳しい情報が必要な場合は、私に尋ねてください。

お時間とご回答ありがとうございます。

4

1 に答える 1

1

プロジェクトの設定によって異なります。これを行う方法はおそらく他にもありますが、メッシュ レンダラーを使用して 3D テキストを非表示にすることをお勧めします。あなたのコードでは、最後の更新以降に場所に変更があったかどうかを update 関数でチェックインしたいと考えています。これを行う方法は、2 つの変数を作成することです。1 つはユーザーの現在の位置用で、もう 1 つは前回の更新呼び出しでの位置用です。ここでの秘密は、Update と LateUpdate という 2 つの関数にあります。

これが例です

#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 のインスタンスが 1 つしかないため、シーンをクリーンアップするという頭痛の種に直面する必要がなくなります。これがお役に立てば幸いです...ちょっとした作業が必要かもしれませんが、今すぐ走らなければなりません。もっと説明する必要があるかどうか教えてください。

于 2012-09-13T12:42:12.360 に答える