AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

VR SDKなしでスマホVRをやってみる

 SSD換装でクリーンインストールしたので、JDKやAndroidSDKなどを入れてAndroidスマホでアプリを動かせる環境を再構築した。
 そろそろCardboardでVRやってみようとGoogle VR SDKを入れるも、buildはできるけど、Android 4.4以上の実機でしか動かせない。
 うちのスマホはAndroid4.1(´・ω・`)


 色々と検索してDIVEというSDKを発見。これはGoogleがUnityに対応する前に対応していたSDKらしい。
エイバースの中の人 : UnityでGoogle Cardboard用のコンテンツを作成する

 しかし、動かない。buildもできるし、実機にも転送できるけどスマホのジャイロに反応しない(´・ω・`)

 仕方ない。カメラをジャイロで動かそう!

qiita.com
 色々と長いソースが貼ってあるけど、要はカメラがジャイロに同期すればいいんでしょ?
 カメラに以下のソースをAddするだけでVRができた!\(^o^)/
 ジャイロの返してくる座標系を変換してカメラと合わせただけ。

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

	void Start () {
		Input.gyro.enabled = true;
	}
	void Update () {
		if (Input.gyro.enabled)
		{
			Quaternion gyro = Input.gyro.attitude;
			this.transform.localRotation = Quaternion.Euler(90, 0, 0) * (new Quaternion(-gyro.x,-gyro.y, gyro.z, gyro.w));
		}
	}
}

 二眼にするためには、カメラを2つ作ってcamera rightとcamera leftとして、leftはrightの子供にする。
 rightにだけ上記コードをAddする。
 カメラの表示領域は、cameraのInspectorのViewport Rectで、
 右は X0.55 Y0 W0.45 H1
 左は X 0 Y0 W0.45 H1
 と設定すれば画面上の左半分にcamera leftの映像。右半分にcamera rightの映像が映る。
 真ん中はやや空けたほうが左右の目で見る映像が分離されるので良い。
 左右のカメラをやや左右に動かしておくと立体視もできる。2つのカメラを+0.6 と-0.6でX座標を動かしてみた。

f:id:yasu9780:20160923180749p:plain

カメラのコードのUpdateに、以下を追加すると。今見ている方向に自動で移動していく。
上を向けば上に。下を向けば下に進む。

transform.position += transform.forward*Time.deltaTime*10f;

 巨大SDユニティちゃんのいるパリの町並みを飛び回ることができた。
f:id:yasu9780:20160923180912p:plain

 SDKっているの?(*´ω`*)

© Unity Technologies Japan/UCL