2014年11月7日金曜日

cardboardやタオバイザー用にunity+diveで作った物をハコスコ対応にする。

はじめに

先日、クエリちゃん360VR(google play)というのを、cardboard用にunity+diveで作成しました。

ほとんど以下のスライドを見ながらサンプルを少しいじっただけです。
http://www.slideshare.net/NobuhikoSasaki/ss-38173018

あ、カメラを回す部分は以下のサイトを参考にしました。
http://greety.sakura.ne.jp/redo/2014/09/durovis-dive-sdkcardboard.html

更に、以下のサイトの最後を参考に、ハコスコにも対応しました。
http://warapuri.tumblr.com/post/98800390873/spherical-image-cam-unity

ハコスコ対応

ハコスコ対応だけハマったので詳しく書きます。
入力を制御してる適当なクラスの上の方に変数を追加します。


  public bool doubleCameraFlag = true;


更にupdate関数で以下の様に書いていました。
先ほどのサイトに書いてる事だけだと絵が潰れるので、aspect比も変更しています。
(本当は座標も補正した方が良さそうです、ハコスコの時ちょっと近いwww)


  // タッチ情報を取得する
  TouchPhase touchPhase = TouchPhase.Ended;
  if (Input.touchCount > 0)
  {
   touchPhase = Input.GetTouch (0).phase;
  }
  // タッチ直後?
  if ((touchPhase == TouchPhase.Began) ||
      // マウスが押された瞬間?
      (Input.GetMouseButtonDown(0)))
  {
   doubleCameraFlag ^= true;
   GameObject diveCamera = GameObject.Find("Dive_Camera");
   if (doubleCameraFlag == true)
   {
    // 左カメラ復活
    diveCamera.GetComponent<OpenDiveSensor>().cameraleft.enabled = true;
    // 右カメラを元に戻す
    //diveCamera.GetComponent<OpenDiveSensor>().cameraright.fieldOfView = 85.0F;
    diveCamera.GetComponent<OpenDiveSensor>().cameraright.rect =
     new Rect(0.5F, 0.0F, 0.5F, 1.0F);
   }
   else
   {
    // 左カメラ停止
    diveCamera.GetComponent<OpenDiveSensor>().cameraleft.enabled = false;
    // 右カメラ補正
    //diveCamera.GetComponent<OpenDiveSensor>().cameraright.fieldOfView = 45.0F;
    diveCamera.GetComponent<OpenDiveSensor>().cameraright.rect =
     new Rect(0.0F, 0.0F, 1.0F, 1.0F);
   }
   // アスペクト比も変更
   if (doubleCameraFlag == true)
   {
    diveCamera.GetComponent<OpenDiveSensor>().aspectRatio=
        (Screen.height*2.0f)/Screen.width;
   }
   else
   {
    diveCamera.GetComponent<OpenDiveSensor>().aspectRatio=
        (Screen.height*1.0f)/Screen.width;
   }
  }

で、このプログラム外部からDive_Cameraを制御しているのですが、
何故かDive_Cameraのupdate関数ではUnityEngine.TouchPhaseが使えませんでした。
またいつかエラーになる原因を調べたいです・・・。

0 件のコメント:

コメントを投稿