web-dev-qa-db-ja.com

Vuforia&Unityを使用して、地面を1回だけ検出してオブジェクトを作成します

UnityとVuforiaを使用してARアプリを作成しようとしています。グランドプレーンが検出されたときにスポーンする必要がある3Dモデルがありますが、これは1回だけ実行する必要があります。 Vuforiaの動作方法は、新しい飛行機が検出されたときにオブジェクトを生成し続けます。だから私がする必要があるのは、飛行機を一度だけ検出するか、オブジェクトを一度だけスポーンすることです。 Unityは初めてなので、これを行うには助けが必要です。誰かが私がこれを達成するために何をする必要があるかを教えてくれれば素晴らしいです。

5
Anup G Prasad

アプリでは、デフォルトで次のプロパティが設定されたPlane Finderオブジェクトがどこかにあるはずです。
enter image description here

Plane Finderオブジェクトには、プレーンが見つかった場合にPosition Contentメソッドを呼び出すBehaviorコンポーネントがアタッチされています。そのメソッドはContent Positioning Behaviourに属し、Ground Plane Stageのインスタンス(クローン)を作成します。複数のインスタンスを回避するには、次の場所にあるvuforia Deploy Stage Onceスクリプトをインポートする必要があります: https://library.vuforia.com/articles/Solution/ground-plane-guide.htmlPlane Finder Behaviourを次のように変更する必要があります: enter image description here

3
Hristo

Vuforiaが更新されました。DeploymentStageOnceスクリプトはありません。タッチ中に複製を停止するには、コンテンツ配置動作(スクリプト)の複製ステージをオフにする必要があります。プレーンファインダーをクリックしたときにインスペクターを確認します。 enter image description here

6
zyonneo

私はそれで長い間苦労しました、要するに私たちはヒット後にAnchorInputListenerBehaviourを無効にしなければなりません。

  1. 以下のコードを使用して、PlaneFinderに新しいスクリプトを添付しました。

    <!-- language-all: c# -->
    public void OnInteractiveHitTest(HitTestResult result)
    {
        var listenerBehaviour = GetComponent<AnchorInputListenerBehaviour>();
        if (listenerBehaviour != null)
        {
            listenerBehaviour.enabled = false;
        }
     }
    
  2. Plane FinderBehaviorにイベントを追加しました

enter image description here

以上でお役に立てば幸いです。

更新されたバージョンの場合:

enter image description here

「詳細」設定に移動し、「インタラクティブヒットテストをオン」スクリプト->スクリプトの「オフ」オプションを選択します。

1
Deepak

この問題については、vuforiaのWebサイトを試してください

nityのグランドプレーンの概要

0
Codemaker

答えのほとんどは正しいですが、一種の時代遅れです。それを行う正しい方法はコードによるものです。

たとえば、GameManagerというgameObjectを作成し、GroundPlaneStageと、そのGameManagerにアタッチされたスクリプトにスポーンするオブジェクトのプレハブを渡します。たとえば、GameManagerScript.csと呼び、次のことを行うspawnObjectsという小さな関数を作成します。

public class SceneManagerScript : MonoBehaviour {

    public GameObject objPrefab;
    public GameObject ground;
    private int count = 0;

    public void spawnObject() {
        Instantiate(objPrefab, new Vector3(count, 0, 0), Quaternion.identity, ground.transform);
    count += 2; 
    }
}

その後、PlaneFinder、特にPlaneFinderBehaviour.csコンポーネントに移動すると、OnInteractiveHitTestとOnAutomaticHitTestのコールバックがあります。この場合、OnAutomativeHitTestが必要な場合は、[+]をクリックして、新しいコールバックを追加します(下の画像のように上のコードの関数spawnObject) )

enter image description here

  1. また、プレハブを介して好みのオブジェクトをインスタンス化するときは、オブジェクトが同じ位置に追加されないように、適切な位置の更新を書き込むことを忘れないでください
  2. また、GroundPlaneStageをオブジェクトの親にすることを忘れないでください。また、Instantiate()関数で追加する位置は、その親(上記のコードで変数groundで表されるGroundPlaneStage)に対して相対的であることを認識してください。
  3. 最後に、次の図に示すように、PlaneFinderの「ContentPositioningBehaviour」コンポーネントからDuplicateStageのチェックを外すことを忘れないでください。

enter image description here

お役に立てば幸いです

0
ArmaniDarknight