
前回オブジェクトを外部から取得できるようしたので、今回はそれをTangoと連携する部分をご紹介したいと思います。
スクリプトの記述を外部オブジェクトと連携するのが重要になってきます。
TangoSDKの読み込み
Tangoと連携するために前回同様、TangoSDKの読み込みます。
Tango開発に必要なプレハブも忘れずに追加します。
Assertの「TangoPrefabs」フォルダにある「Tango AR Camera」「Tango Point Cloud」「Tango Manager」の3つを追加します。
「main camera」は今回も使用しないので、削除しておきましょう。
TangoManagerの設定
次に「TangoManager」の設定をします。
「Hierarchy」パネルにある、「Tango Manager」をクリックし、「Inspector」パネルで「Enable Depth」「Enable Video Overlay with Method」の項目にチェックを入れます。
こちらも前回同様の作業ですね。
配置用のgameObject・スクリプトの作成
バーチャル空間上に物体を置くためのGameObjectを作成します。
「GameObject」メニューから「CreateEmpty」を選択し、名前を「UIController」に変更します。
次に「AddComponent」から「NewScript」を選択して「KittyUIController」という名前のC#のスクリプトを追加します。
スクリプトの記述・変更
スクリプトを追加したらそこに動きの部分を記述していきます。
下のコードをコピー&ペーストしましょう。
ポイントは「Example2_WWW」スクリプトから外部オブジェクトを追加することです。
using UnityEngine;
using System.Collections;
public class KittyUIController : MonoBehaviour
{
public GameObject m_kitten;
private TangoPointCloud m_pointCloud;
private GameObject bullet;
private GameObject refObj;
void Start()
{
m_pointCloud = FindObjectOfType
refObj = GameObject.Find( "ObjectManager" );
}
void Update ()
{
if (Input.touchCount == 1)
{
// Trigger place kitten function when single touch ended.
Touch t = Input.GetTouch(0);
if (t.phase == TouchPhase.Ended)
{
PlaceKitten(t.position);
}
}
}
void PlaceKitten(Vector2 touchPosition)
{
// Find the plane.
Camera cam = Camera.main;
Vector3 planeCenter;
Plane plane;
if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane))
{
Debug.Log("cannot find plane.");
return;
}
// Place kitten on the surface, and make it always face the camera.
if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f)
{
Vector3 up = plane.normal;
Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized;
Vector3 forward = Vector3.Cross(right, plane.normal).normalized;
Example2_WWW d = refObj.GetComponent
bullet = Instantiate(d.objData.gameObjects[0], planeCenter,Quaternion.Euler(0,0,0)) as GameObject;
}
else
{
Debug.Log("surface is too steep for kitten to stand on.");
}
}
}
最後に、「Example2-WWW」スクリプトの10行目、「ObjReader.ObjData objData」を外部からアクセスできるように「public ObjReader.ObjData objData」にしておきましょう。
ビルドしてみる
ビルドするとオブジェクトのローディングが始まります。
ローディングが完了後、床にタップすると読み込んだオブジェクトが生成されれば出来上がりです。