LoginSignup
0
0

More than 3 years have passed since last update.

Unity: VuforiaのImageTargetにオブジェクトを動的に追加する方法

Last updated at Posted at 2021-01-24

How To Dynamically Add Content to Targets in Unity(https://library.vuforia.com/articles/Solution/Working-with-Vuforia-and-Unity.html)
を参考にしたがPrefabを表示出来なかったので、こうやったらOKだった。

環境

OS macOS 10.15.7
Unity 2019.4.2f1
Addressable 1.16.15

手順(上記マニュアルGoogleで直訳)

  1. Unityプロジェクトを開くか作成し、ImageTarget GameObjectを追加します(メニュー:GameObject> Vuforia> Image)

  2. 実行時に、カスタム3Dモデルを画像ターゲットに動的にアタッチするとします。

  3. プロジェクトビューの[アセット]フォルダーの下に、Prefabというサブフォルダーを作成します(まだサブフォルダーがない場合)。

  4. PrefabオブジェクトをPrefabフォルダーに追加します。 3Dオブジェクトを表すカスタムPrefabを作成する方法はたくさんあります。たとえば、次のことができます。

  • シーンビューで単純なCubeゲームオブジェクトを作成し、それをシーンビューからプロジェクトビューのPrefabsフォルダーにドラッグします。 または
  • Unityでサポートされている形式(FBX、OBJ、DAE、3DSなど)で3Dモデルをインポートします。さまざまなファイル形式の3Dモデルからプレハブを作成する方法の詳細については、UnityのWebサイトを参照してください。
  1. たとえば、C#スクリプトを作成し、それをLoaderと呼び、それをイメージターゲットオブジェクトにアタッチします。

次のコードをスクリプトに挿入して、スクリプトを保存します。

using UnityEngine;
using Vuforia;
using System.Collections;

public class loader : MonoBehaviour, ITrackableEventHandler {
    private TrackableBehaviour mTrackableBehaviour;

    public GameObject model;

    // Use this for initialization
    void Start ()
    {
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();

        if (mTrackableBehaviour)
        {
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
        }
    }               

    // Update is called once per frame
    void Update ()
    {
    }

    public void OnTrackableStateChanged(
              TrackableBehaviour.Status previousStatus,
              TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED)
        {
            OnTrackingFound();
        }
    }
    private void OnTrackingFound()
    {
        if(model!=null){
            GameObject obj=GameObject.Instantiate(model);
            obj.transform.parent = mTrackableBehaviour.transform;
            obj.transform.localPosition= new Vector3(0f, 0f, 0f);
            obj.transform.localRotation = Quaternion.identity;
            obj.active=true;
        }
     }
}

スクリーンショット 2021-01-24 20.06.19.png


なんでマニュアルではpublic Transform myModelPrefab;ってしたんだろう。こうするとPrefabを登録できない。(マニュアルにはUIにPrefabを登録すると書いているのに)。公式マニュアルに掲載されているのでこれが正しいはずなのに。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0