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で直訳)
-
Unityプロジェクトを開くか作成し、ImageTarget GameObjectを追加します(メニュー:GameObject> Vuforia> Image)
-
実行時に、カスタム3Dモデルを画像ターゲットに動的にアタッチするとします。
-
プロジェクトビューの[アセット]フォルダーの下に、Prefabというサブフォルダーを作成します(まだサブフォルダーがない場合)。
-
PrefabオブジェクトをPrefabフォルダーに追加します。 3Dオブジェクトを表すカスタムPrefabを作成する方法はたくさんあります。たとえば、次のことができます。
- シーンビューで単純なCubeゲームオブジェクトを作成し、それをシーンビューからプロジェクトビューのPrefabsフォルダーにドラッグします。
または - Unityでサポートされている形式(FBX、OBJ、DAE、3DSなど)で3Dモデルをインポートします。さまざまなファイル形式の3Dモデルからプレハブを作成する方法の詳細については、UnityのWebサイトを参照してください。
- たとえば、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;
}
}
}
なんでマニュアルではpublic Transform myModelPrefab;
ってしたんだろう。こうするとPrefabを登録できない。(マニュアルにはUIにPrefabを登録すると書いているのに)。公式マニュアルに掲載されているのでこれが正しいはずなのに。