読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

UnityでTHETAの画像をジャイロでグリグリ動かすアプリを作る

逆引きUnity

タイトル長いですが、Unityを使って、THETAの画像を、iPhoneのジャイロで、グリグリ動かすアプリを作ります。

Unityの環境とiOSのビルド環境があることが前提です(UnityはたぶんFreeで大丈夫だと思います)。もっとよい方法があればレスいただけると嬉しいです。

プロジェクトはこちらに置いてあります。

最初に全天球のオブジェクトを作成します。必要なものは次の2つです

  1. THETAなど全天球の画像
  2. 内側を向いた全天球の3Dモデル

全天球の3DモデルはUnityの伊藤さんが公開してくれているので、これを利用します。

この2つが準備できたらAssetsに入れます。

スクリーンショット 2014-07-25 16.29.46

SphereモデルをHierarchyに入れ、テクスチャにTHETAの画像をはります。また、ShaderをUnlit/Textureに変更します。

スクリーンショット 2014-07-25 16.30.07

続いてShererモデルのScaleを変更します。10くらいがちょうどよさそうです。このままだと画像が反転していたので、Zのみマイナスの値にしました。

スクリーンショット 2014-07-25 16.39.30

次にカメラを天球モデルの中心に移動します。Positionをすべて0にします。

スクリーンショット 2014-07-25 16.53.15

これでTHETAの画像が見えるようになりました。

スクリーンショット 2014-07-25 16.30.29

続いてジャイロの部分を作ります。

GyroCameraControllerというスクリプト(ここではC#)を作成し、Main Cameraに設定します。

スクリーンショット 2014-07-25 16.24.49    .

コードは「UnityでGoogleストリートビューを使ったハコスコ対応アプリを作る - Qiita」のコードを使います。

先のリンクの「MyCameraController 」のコードをGyroCameraControllerに書きます。

using UnityEngine;

using System.Collections;

public class GyroCameraController : MonoBehaviour {

void Update () {

Quaternion gyro = Input.gyro.attitude;

this.transform.localRotation = Quaternion.Euler(90, 0, 0) * (new Quaternion(-gyro.x, -gyro.y, gyro.z, gyro.w));

}

}

これでiOS用に出力します。端末をぐるぐる回すのでPlayer Settingsから画面の向きをLandscape固定にします。

スクリーンショット 2014-07-25 16.35.14

ビルドして端末で実行すると、全天球画像を端末の動きで制御できます。

 

これをハコスコに入れて見ても面白いですし、PC用であればカメラをOculus Riftに変えてもよいでしょう。またPCであればPro限定になりますが、動画をテクスチャにすることもできますので、全天球動画を使うこともできます。

iOSはMobile Movie TextureというAssetが販売されており、これを利用することで動画をテクスチャとしてはりつけることができるようです(iOS Proが必要なのか、手元の環境で動かないので未確認です)。

これだけのことが、ほぼコードなしで実現できるのはすごいですね。。。