Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

連絡はサークルTwitterのDMへお願いします。
「面白法人カヤックVR分室」としても活動しています。詳細はこちら

VR Academy 〜プレ講座〜

1/28、VRプロフェッショナルアカデミーのプレ講座が行われました。
来年度の4月から本格的に始まる講座のために、VRがどのようなものか、ビジネスではどのように使われているか、VRコンテンツのジャンルはどのようなものがあるか、制作にはどのような知識・技術が必要かなどを約5時間で教えていただきました。

「VRの価値の3要素」

1、体験

映像をあたかも目の前の現実として経験している

2、時間、場所の超越

時間や場所の制約がない

3、超現実

そもそも現実では不可能な視点で見れる

これこそがVRの価値だと。これから作る作品にはこれらがふくまれているかに気をつけて開発していこうと思いました。

あと、このVRアカデミー4月からはじまって3ヶ月間毎週あるのですが、最後にいままで習ったものを使って作品を作り、その作ったものを企業の方々に来てもらって発表するらしいんです。いやあ、知らなかたです。すごく緊張しますが、普通の学生じゃ経験できないようなことだと思うので頑張ってみようと思います。

 その日学んだことを忘れないように、このブログを備忘録として記録していこうかと思います。っということで1/28の分書いていきます。


「カメラを2分割する」

f:id:aizu-vr:20170305132337p:plain

スマホのVRでは画面を2分割しますよね、まずその2分割の方法を書いていきます。

まず、Hierarchy に Camera を2つ用意します。(Hierarchy で右クリック -> Camera)
両方とも同じ座標に設置します。(Transform コンポーネントを同じにする)
その2つのカメラを空オブジェクトにいれておきましょう。(Hierarchy で右クリック -> Create Empty。その空オブジェクトを違うわかりやすい名前に変えておきましょう)
f:id:aizu-vr:20170305132654p:plain

Right/LeftCamera には最初から、

  • Transform
  • Camera
  • Flare Layer
  • Audio Listener

の Component がついています。同じシーンに ”Audio Listener” が2つ以上あるとUnity側から怒られるので片方消しておきましょう。

LeftCamera の Camera コンポーネントViewport Rect プロパティーの値をいじって2分割します。

Viewport Rect は X, Y, W, H の要素を持っており、X, Y はカメラビューを2次元の平面上のどこに表示するかを設定でき、W, H はカメラビューの表示の幅と高さを設定できます。すべて0~1の値です。

カメラビューの左上を軸として考え、左側のカメラのXを0、Wを0.5にします。2分割なので半分の0.5です。同じように右側のカメラのXを0.5、Wを0.5にすることによって2分割にできます。左右同じビューになっていればOKです。


「プラットフォームによってコードを分岐させる」

Unity上だとこのコード実行してほしいけど、スマホ上だとこっちのコードを実行してほしい...というときには、プラットフォームごとに処理を分けます。#if#elif をつかって分岐させます。

↓プラットフォームごとの書き方はこちらの公式のマニュアルを見てください
docs.unity3d.com

sample code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour {

	public float speed;
	Quaternion _attitude;

	// Use this for initialization
	void Start () {
		#if UNITY_EDITOR
		#elif UNITY_IOS || UNITY_ANDROID

		Input.gyro.enabled = true;

		#endif
	}

	// Update is called once per frame
	void Update () {

		#if UNITY_EDITOR

		if (Input.GetKey (KeyCode.LeftArrow)) {
			this.transform.Rotate (Vector3.up * -Time.deltaTime * speed, Space.World);
		}
		if (Input.GetKey (KeyCode.RightArrow)) {
			this.transform.Rotate (Vector3.up * Time.deltaTime * speed, Space.World);
		}
		if (Input.GetKey (KeyCode.UpArrow)) {
			this.transform.Rotate (Vector3.left * Time.deltaTime * speed);
		}
		if (Input.GetKey (KeyCode.DownArrow)) {
			this.transform.Rotate (Vector3.left * Time.deltaTime * -speed);
		}

		#elif UNITY_IOS || UNITY_ANDROID

		_attitude = Input.gyro.attitude;
		_attitude.x *= -1; _attitude.y *= -1;
		this.transform.rotation = Quaternion.AngleAxis(90f, Vector3.right) * _attitude;

		#endif
	}
}

これを書いたファイルを Cameras に付け加えると、iPhoneまたはAndroidだったら内臓されているジャイロセンサーをONにして、デバイスの向きをとりそれをカメラの向きに代入してくれます。


第1回はこんな感じでした。来年度から本格的に始まる前にやっとくことをおすすめされたところをやっておき万全の状態で挑みたいですね

written by Akiyama

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!