UnityとVuforiaを使用してARアプリを作成しようとしています。グランドプレーンが検出されたときにスポーンする必要がある3Dモデルがありますが、これは1回だけ実行する必要があります。 Vuforiaの動作方法は、新しい飛行機が検出されたときにオブジェクトを生成し続けます。だから私がする必要があるのは、飛行機を一度だけ検出するか、オブジェクトを一度だけスポーンすることです。 Unityは初めてなので、これを行うには助けが必要です。誰かが私がこれを達成するために何をする必要があるかを教えてくれれば素晴らしいです。
アプリでは、デフォルトで次のプロパティが設定されたPlane Finder
オブジェクトがどこかにあるはずです。
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
を次のように変更する必要があります:
私はそれで長い間苦労しました、要するに私たちはヒット後にAnchorInputListenerBehaviourを無効にしなければなりません。
以下のコードを使用して、PlaneFinderに新しいスクリプトを添付しました。
<!-- language-all: c# -->
public void OnInteractiveHitTest(HitTestResult result)
{
var listenerBehaviour = GetComponent<AnchorInputListenerBehaviour>();
if (listenerBehaviour != null)
{
listenerBehaviour.enabled = false;
}
}
Plane FinderBehaviorにイベントを追加しました
以上でお役に立てば幸いです。
この問題については、vuforiaのWebサイトを試してください
答えのほとんどは正しいですが、一種の時代遅れです。それを行う正しい方法はコードによるものです。
たとえば、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) )
お役に立てば幸いです