Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Oculus Go アプリ開発ハンズオン

692 views

Published on

2018/06/1
第38回スタジオアルカナ社内勉強会

Published in: Technology
  • Be the first to comment

Oculus Go アプリ開発ハンズオン

  1. 1. Oculus Goアプリ開発 ハンズオン 2018/6/1 社内勉強会 スタジオ・アルカナ 遠藤勝也
  2. 2. 必要機材 PC(今回はMacOSを使用) Oculus Go USBケーブル 事前準備 Oculus Goにアカウントを設定 スマートフォンにOculusアプリをインストール Oculusアカウントを作成
  3. 3. 流れ 1. 開発環境の構築 2. 実機ビルド 3. Oculus Goの機能を扱う 4. 制作作業
  4. 4. 開発環境の構築 Unity Oculus Utilities for Unity JDK Android Studio
  5. 5. Unity 3D & 2D ゲームエンジン アカウントを作成する インストール時に Android Build Supportにチェックを入れる ダウンロードURL https://store.unity.com/ja
  6. 6. Oculus Utilities for Unity HMDやコントローラを扱うためのUnity Package あとで使うのでDocumentとかに置いておく ダウンロードURL https://developer.oculus.com/downloads/packa ge/oculus-utilities-for-unity-5/
  7. 7. JDK UnityプロジェクトのAndroidビルドに使用 バージョンは1.8 安定して動くようなので使用 ダウンロードURL http://www.oracle.com/technetwork/java/javas e/downloads/jdk8-downloads-2133151.html
  8. 8. Android Studio Android SDKの管理に使用 Android SDK Managerから Android 7.1, Nougat, API Level 25を ダウンロード ダウンロードURL https://developer.android.com/studio/?hl=ja
  9. 9. 実機ビルド
  10. 10. Oculus Goを開発者モードにする Oculus デベロッパーセンターで アカウント及び団体を作成 スマートフォンのOculusアプリから OculusGoに接続 その他の設定 開発者モードをオンにする OculusGoをUSBケーブルでPCに繋ぐ OculusGoを装着 USBデバッグを許可
  11. 11. Unityプロジェクト作成 Unityを起動 Unityで新規プロジェクト作成 Project nameはOculusGoHandsOn
  12. 12. JDKとAndroid SDKパスの設定
  13. 13. SDK /Users/${USER_NAME}/Library/Android/sdk JDK /Library/Java/JavaVirtualMachines/ jdk${VERSION}.jdk/Contents/Home ${USER_NAME} と${VERSION} は それぞれの環境に合わせて置き換え。 JDKのパスはコマンドラインから /usr/libexec/java_home で確認可能。 SDKのパスはAndroidStudioのPreferencesから検索 ボックスにAndroid SDK と入力して確認可能。
  14. 14. Player Settings アプリケーションの パッケージネームやAPIレベルを設定
  15. 15. Other Settings Package Name: com.oculusGoHandsOn.shooting Minimum API Level: 25 Target API Level: 25
  16. 16. XR Settings Virtual Reality Supported: check Virtual Reality SDKs: Oculus
  17. 17. ビルド確認
  18. 18. ビルド確認 Build & Runで実機で動くか確認
  19. 19. 実行結果 Oculus Goを着けたらこんな風景が見える
  20. 20. 失敗した場合 考えられる原因 Android SDK Tools Build system
  21. 21. Android SDK Tools Android SDK Tools 25.2.5を解凍して、 /Users/${USER_NAME}/Library/Android/sdk/tools を置き換える。 (一応、元からあった方は_tools とかにリネーム)
  22. 22. Build Settings File Build Settings... Android Build System: Internal
  23. 23. Oculus Goの機能を扱う
  24. 24. UnityPackageインポート 最初にダウンロードしてきて解凍した Oculus Utilities for Unity内の OculusUtilities.unitypackage をインポート Assets Import Package Custom Package OculusUtilities.unitypackage
  25. 25. 簡単にUnityの画面を説明
  26. 26. Prefabを追加 追加するPrefabはAssets/Oculus/VR/Prefabs にある
  27. 27. Prefabとは? Unity - マニュアル: プレハブより Oculus Goの機能を利用するためのテンプレート プレハブはテンプレートとして使われ、シーン内 に新しいオブジェクトインスタンスを作成するこ とができます。プレハブアセットに加えられたす べての編集内容はすぐに生成されたすべてのイン スタンスに反映されますが、各インスタンス別に コンポーネントをオーバーライドしたり、設定 したりできます。 “ “
  28. 28. OVRCameraRigを追加 OculusGoの姿勢情報などを扱うためのPrefab HierarchyにOVRCameraRig を ドラッグ&ドロップして追加
  29. 29. TrackedRemoteを追加 OculusGoのコントローラを扱うためのPrefab Hierarchyの OVRCameraRig/TrackingSpace/RightHandAnchor に TrackedRemote をドラッグ&ドロップして追加
  30. 30. MainCameraを削除 HierarchyのMainCamera を 右クリックしてDeleteを選択
  31. 31. コントローラの確認 Build & Runでコントローラが表示されるか確認
  32. 32. 制作作業
  33. 33. 射的みたいなものを制作
  34. 34. 床になるPlaneを追加
  35. 35. カメラの位置を調整 OVRCameraRigのPositionのYを1.5、Zを-4にする
  36. 36. 的になるCubeを追加
  37. 37. 的の位置を調整 CubeのPositionのYを0.5、Zを4にする
  38. 38. 的に物理演算を追加 Cubeを選択してInspectorの AddComponentをクリック PhysicsをクリックしてRigidbodyを選択
  39. 39. Rigidbody
  40. 40. Unityのゲームオブジェクトとコンポーネント ゲームオブジェクト(Entity)が Transformなどのコンポーネントを持つことで その機能や振る舞いを持つ。 Rigidbodyは物理演算の機能を持つ。 参考: http://mikan- daisuki.hatenablog.com/entry/2015/10/22/220439
  41. 41. 衝突検出モードの設定 衝突検出モードをContinuousに設定する
  42. 42. 衝突検出モードについて Rigidbody.collisionDetectionMode - Unity スクリプ トリファレンスより 高速で移動する弾にはContinuousDynamic を、 的にはContinuous を設定 最高の結果のために、高速で移動するオブジェク トはこの値を CollisionDetectionMode.ContinuousDynamicに 設定し、その他の衝突が必要なオブジェクトには CollisionDetectionMode.Continuousを設定して ください。 “ “
  43. 43. 発射用のスクリプトを追加する RightHandAnchorを選択して、 InspectorのAddComponentをクリック New ScriptをクリックしてRightHandAnchor と 入力しCreate and Addをクリック
  44. 44. 発射用のスクリプト
  45. 45. エディタの設定
  46. 46. Preferences
  47. 47. External Script Editor お好きなエディタを選択 例はAtom
  48. 48. スクリプトをエディタで開く Assets以下にあるRightHandAnchorを ダブルクリック
  49. 49. 弾を発射する処理を追加 Update() の中に以下のコードを追加 if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger)) { GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere); bullet.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); bullet.transform.position = transform.position; Rigidbody body = bullet.AddComponent <Rigidbody>(); Vector3 force = transform.forward * 20.0f; body.AddForce(force, ForceMode.Impulse); body.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; Destroy(bullet, 1.0f); }
  50. 50. スクリプト解説 人差し指のトリガーが押された時に実行 if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger)) { }
  51. 51. スクリプト解説 球体を生成 位置と大きさを設定 GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere); bullet.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); bullet.transform.position = transform.position;
  52. 52. スクリプト解説 Rigidbodyを球体に追加 コントローラの向きに加速させる 衝突検出モードを設定 1秒後に弾が消えるようにする Rigidbody body = bullet.AddComponent <Rigidbody>(); Vector3 force = transform.forward * 20.0f; body.AddForce(force, ForceMode.Impulse); body.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; Destroy(bullet, 1.0f);
  53. 53. 動作確認 Build and Runで動作確認 人差し指のトリガーで弾が発射される
  54. 54. おまけ レーザーポインタはLineRenderer で実現可能 Physics.Raycast(origin, direction) に コントローラの位置と向きをorigin direction として入力すればポインティングもできる
  55. 55. レーザーポインタとRaycastの例 Hierarchyで右クリックしてEffectsからLineを追加
  56. 56. TransformのPositionを(0, 0, 0) Line RendererのWidthを0.01に設定する
  57. 57. RightHandAnchor.cs のメンバ変数に以下を追加 public GameObject lazer; private LineRenderer lazerRenderer; RightHandAnchorコンポーネントに Lazerというプロパティが追加される。 Unityではpublic変数に設定すると、 このようにGUIで設定できるようになる。
  58. 58. Lazerプロパティに先ほど追加したLineを設定
  59. 59. RightHandAnchor.cs のStart() に以下のコードを追加 // LineオブジェクトからLineRendererコンポーネントを取得 lazerRenderer = lazer.GetComponent <LineRenderer>(); // LineRendererコンポーネントの終端を透明に設定 lazerRenderer.endColor = new Color(0, 0, 0, 0);
  60. 60. RightHandAnchor.cs のUpdate() に以下のコードを追加 RaycastHit hitInfo; // Raycast()でコントローラの直線上にオブジェクトがあるか判定 bool hit = Physics.Raycast( transform.position, transform.forward, out hitInfo, Mathf.Infinity); // オブジェクトがあったらレーザの色を紫っぽい色に // オブジェクトがなかったらレーザの色を緑っぽい色にする lazerRenderer.startColor = hit ? new Color(1, 0, 0.76f, 1) : new Color(0, 1, 0.76f, 1); // レーザの始点と終点を設定 Vector3 start = transform.position; Vector3 end = start + transform.forward; lazerRenderer.SetPosition(0, start); lazerRenderer.SetPosition(1, end);
  61. 61. こんな感じ
  62. 62. ありがとうございました

×