VR Academy 〜プレ講座〜
1/28、VRプロフェッショナルアカデミーのプレ講座が行われました。
来年度の4月から本格的に始まる講座のために、VRがどのようなものか、ビジネスではどのように使われているか、VRコンテンツのジャンルはどのようなものがあるか、制作にはどのような知識・技術が必要かなどを約5時間で教えていただきました。
「VRの価値の3要素」
1、体験
映像をあたかも目の前の現実として経験している
2、時間、場所の超越
時間や場所の制約がない
3、超現実
そもそも現実では不可能な視点で見れる
これこそがVRの価値だと。これから作る作品にはこれらがふくまれているかに気をつけて開発していこうと思いました。
あと、このVRアカデミー4月からはじまって3ヶ月間毎週あるのですが、最後にいままで習ったものを使って作品を作り、その作ったものを企業の方々に来てもらって発表するらしいんです。いやあ、知らなかたです。すごく緊張しますが、普通の学生じゃ経験できないようなことだと思うので頑張ってみようと思います。
その日学んだことを忘れないように、このブログを備忘録として記録していこうかと思います。っということで1/28の分書いていきます。
「カメラを2分割する」
スマホのVRでは画面を2分割しますよね、まずその2分割の方法を書いていきます。
まず、Hierarchy に Camera を2つ用意します。(Hierarchy で右クリック -> Camera)
両方とも同じ座標に設置します。(Transform コンポーネントを同じにする)
その2つのカメラを空オブジェクトにいれておきましょう。(Hierarchy で右クリック -> Create Empty。その空オブジェクトを違うわかりやすい名前に変えておきましょう)
Right/LeftCamera には最初から、
- Transform
- Camera
- GUI Layer
- 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