- 投稿日:2019-05-30T23:53:32+09:00
【Unity】オンラインゲームを作るためのツール選択
こんにちは、ブログ「学生ブロックチェーンエンジニアのブログ」を運営しているアカネヤ(@ToshioAkaneya)です。
【Unity】オンラインゲームを作るためのツール選択
オンラインゲームの中でもリアルタイム通信が必要なタイプのゲームを考えます。
自分の経験からで恐縮ですが、このようなゲームを作る場合はPhotonを利用するか、自前WebSocketサーバーを作るかのどちらかが良いと思います。(自分はこの2パターンの経験があります。)結論から申し上げると、まずはPhotonを利用して作り始めるのがオススメです。
Photonを使えばサーバーのコーディングをすることなくリアルタイム通信が出来ます。また、無料枠では20人までの同時接続が可能です。20人も可能であれば、開発中では十分でしょう。自前WebSocketサーバーを建てるのはPhotonでは実現出来ないことを実現したいときに行うと良いです。
はてなブックマーク・Pocketはこちらから
- 投稿日:2019-05-30T23:15:58+09:00
UnityでARKit2 - 第二回 -
UnityでARアプリ開発をやってみたい 第二回
- 第一回: UnityでARKit2
- 第二回: 本記事
1. この記事でやること
前回の記事で、BitBucketから拝借してきたunity-arkit-pluginのREADMEをちゃんと読んでおこうという回です。記事にするほどのことでもないかもしれませんが、論文を読むときもまずはAbstractから読みますし、きっと大切なことが書いてあると思います。
2. READMEを読む
概要
- Unity-ARKit-PluginはiOSのARKitSDKをUnityで利用できるようにしたものです
- ARKitのいろんな機能がちゃんと使えます
- 多くのアプリがすでにこのプラグインを使ってAppStoreに公開されています
- Unity2017.4以降のバージョンで使ってね
- 細かい使い方はTUTORIAL読んでね
- Licenseも読んでね(まぁ、MITライセンスだし変なことしなければ自由にしてね)
- プルリク遠慮なく
動作要件
- Unity v.2017.4 以降
- XCode 10.0 と ARKit SDK
- ARKit対応のiOSデバイス
- iPhoneなら6S以降
- iPadなら2017年発売モデル以降
- iOS12 以降
ビルドしてみよう
これは第一回: UnityでARKit2でやったので割愛しますが、いろんなサンプルが用意されているので、ひととおり試してみるのもいいかもしれないですね。
ここでポイントはUnityARBuildPostprocessor.cs(Unity-Technologies-unity-arkit-plugin/Assets/UnityARKitPlugin/Plugins/iOS/UnityARKit/Editor/UnityARBuildPostprocessor.cs)がビルド時にもろもろのXCodeプロジェクトへの変換処理をしてくれているということ。このファイル、とても大事。正直言って中身見てもなんのことやらさっぱりなので、なんかすごいありがたいなーという気持ちだけ持っておけば大丈夫だと思います。大事なのは感謝の気持ち。API
なんかいっぱい書いてるー :D
DelegateとEventのメジャーどころのリストですね。
これは手を動かし始めないとなんとも言えないやつです。あとがき
第二回はREADMEを読んでみました。
読んでみてわかったことは、ちゃっちゃとTUTORIALやれってことです。
あとはまぁ、動作環境のチェックは必須ですよね。はい、では次回はTUTORIALやります。
今回はこのくらいで。
ではでは。
- 投稿日:2019-05-30T22:54:10+09:00
Androidスマホで自由に動き回れるVRアプリを作る方法(Unity・ARCore・Google VR(Cardboard))
こんな感じに部屋の中を動き回れるものを作ることができます。
© Unity Technologies Japan/UCLいわゆる、6DoFっていうやつです。
ARCoreに対応しているスマホと、スマホ装着型のVRゴーグルを用意すれば誰でも試せます。
スマホ内蔵のカメラを使いますが、マーカーなどは必要ありません。補足
- 古い機種やiPhoneといったARCore非対応の端末には使えません。(iPhoneの場合は、ARKitを使えばいけるかもしれないけど、試したことはありません)
- ARCoreを使っていますが、ARアプリではありません。(カメラ画像とモデル表示の位置がずれてしまうため、そのままではARでは使えないです)
- 自分の足で動きまわることができますが、なるべく広い部屋で行い、壁などにぶつからないように注意してください。
- 起動時にはカメラ画像が表示されますが、その時は床を映してください。床を認識次第、VRの画面に移行します。
用意するもの
- Unity 2018.3.8f1
- arcore-unity-sdk-v1.9.0.unitypackage(ダウンロード先)
- GoogleVRForUnity_1.200.0.unitypackage(ダウンロード先)
手順
1) 新しいプロジェクトを作成
2) File→Build Settings...から設定画面を開き、Androidをクリック、その後Switch Platformボタンを押して、設定を切り替える
3) arcore-unity-sdk-v1.9.0.unitypackageをUnityエディタ上のAssetsフォルダにドラッグアンドドロップし、インポートする
4) GoogleVRForUnity_1.200.0.unitypackageも同様にインポートする
5) シーン上にあるカメラを削除する
6) Assets/GoogleARCore/Prefabsにある、「ARCore Device」プレハブをHierarchyにドラッグアンドドロップし、シーンに追加
7) 空のゲームオブジェクトを追加
8) 以下のスクリプトを作成TrackingObjects.csusing System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleARCore; public class TrackingObjects : MonoBehaviour { // 非表示のままにしておくオブジェクト List<GameObject> hideObjs_ = new List<GameObject>(); // 認識した床 DetectedPlane plane_ = null; // カメラ画像のRenderer ARCoreBackgroundRenderer backgroundRenderer_; void Start() { // 子オブジェクトを全て非表示に foreach (Transform trans in transform) { if (trans.gameObject.activeSelf) { trans.gameObject.SetActive(false); } else { // すでに非表示にしているものは除外 hideObjs_.Add(trans.gameObject); } } backgroundRenderer_ = FindObjectOfType<ARCoreBackgroundRenderer>(); } void Update() { // タッチされていたら位置をリセット if (Input.touchCount > 0) { ResetPosition(); } if (Session.Status != SessionStatus.Tracking) { return; } if (plane_ == null || plane_.TrackingState == TrackingState.Stopped) { // 新しい床の取得 plane_ = null; List<DetectedPlane> planes = new List<DetectedPlane>(); Session.GetTrackables<DetectedPlane>(planes, TrackableQueryFilter.All); foreach (DetectedPlane plane in planes) { if (plane.PlaneType != DetectedPlaneType.Vertical) { plane_ = plane; transform.position = new Vector3(transform.position.x, plane_.CenterPose.position.y, transform.position.z); // 子オブジェクトを表示 foreach (Transform trans in transform) { if (!hideObjs_.Contains(trans.gameObject)) { trans.gameObject.SetActive(true); } } // カメラ画像を非表示 backgroundRenderer_.enabled = false; break; } } if (plane_ == null) { // 子オブジェクトを非表示 foreach (Transform trans in transform) { if (!hideObjs_.Contains(trans.gameObject)) { trans.gameObject.SetActive(false); } } // カメラ画像を表示 backgroundRenderer_.enabled = true; } } } // 位置のリセット public void ResetPosition() { Transform transCamera = Camera.main.transform; if (plane_ != null) { transform.position = new Vector3(transCamera.position.x, plane_.CenterPose.position.y, transCamera.position.z); } else { transform.position = transCamera.position; } } }9) 7)のオブジェクトに8)のスクリプトをアタッチ
10) VR画面上に表示させたいゲームオブジェクトを、7)のオブジェクトの子オブジェクトに設定
11) シーンを保存
12) File→Build Settings...→Player Settings...から、以下の設定を変更
- Other Settings→Identification→Package Name:適当に変更
- Other Settings→Identification→Minimum API Level:Android 7.0 'Nougat' (API Level 24)
- XR Settings→Virtual Reality Supported:オン
- XR Settings→Virtual Reality SDKs:Cardboardを追加
- XR Settings→ARCore Supported:オン
あとがき
この内容はすでにやった人がいるようでしたが、私でも試してみたところ、スクリプト1枚で済んでしまったので、それを記事として作ってみました。
これだけだと、いろいろ不都合な点がありますが、等身大のキャラクターが見れるだけでも結構面白いですので、試してみてください。
- 投稿日:2019-05-30T19:00:56+09:00
Unityを使ったMultiple APKのやりかた
Multiple APK とは
App Bundleより昔にあったやりかたで、
API levelやCPU architectureなどでインストールするAPKを切り替えることができる機能のこと。基本的にはApp Bundleで十分なので使用する必要はない。
しかし、プラグインの事情など特別な理由によりAPKファイルを切り替えたい時に使用できる。前提知識
Google Play Consoleにアップロードするため、リリースのやり方は別途調べておく必要がある。
- 私は https://qiita.com/tsucchi13/items/11b3d9c8f99ceedb4b47 を参照しました。手順
- Player Settings - Android - Publishing Settings を設定しておく
- Player Settings - Android - Configuration を変更する
- Player Settings - Android - Identification - Bundle Version Code を被らないように変更する
- 上位の桁にAPI Levelを埋め込むなど他のAPKファイルと被らない番号であればよい(桁数も含め自由に設定できる)
- apkを出力し、必要な分だけ2に戻る
- Google Play ConsoleにすべてのAPKファイルをそれぞれアップロードする
![]()
- 公開する
要点
インストール時に使用されるAPKファイルは以下のように選択されるようなので、そこで制御を行う。
事実上、複数のAPKファイルさえ用意できればBundle Version Codeを管理できさえすれば、他には何もする必要はない。
(パックするツールがあるのかと探したが、その必要がなかった)
- 該当の端末で使用できるAPKファイルをフィルタリングする
- API levelやCPU architectureなどでフィルタリングされる
- フィルタリングされたものの中でBundle Version Codeが一番大きいものが採用される
- そのため、下位互換のあるもの(ARM64がARMv7のものを実行できるなど)については優先するものほど大きい値にする必要がある
- 投稿日:2019-05-30T17:02:05+09:00
Photon VoiceでMicrophone Deviceの抜き差しに対応する方法
- 投稿日:2019-05-30T16:34:13+09:00
【Houdini + SubstanceDesigner + Unity HDRP】HDRPなワッフルをプロシージャルに作ってみる。
はじめに
HoudiniとSubstance Desigerでワッフルを作る方法を紹介します。
テクスチャデータは使わず、すべてプロシージャルに作っています。環境
Windows 10
Houdini Apprentice 17 (無料)
Substance Designer 2019 (有料)
Unity 2018.3.11f1 (無料)作業その1: Houdiniでワッフルを作る
以下のようなワッフルをHoudiniを使ってモデリングします。
![]()
STEP1: 箱を作る
補足: ワイヤーフレームのオーバー表示のON/OFF
Scene Viewにマウスポインタを載せた状態で Shift+Wを押すと、ワイヤーフレームのオーバー表示のON/OFFを切り替えることができます。
STEP2: 上を向いている面を選択
補足: ワイヤーフレーム表示のON/OFF
Scene Viewにマウスポインタを載せた状態で Wを押すと、ワイヤーフレーム表示のON/OFFを切り替えることができます。
STEP3: 上方向の面を小さくする
Transformを利用して、モデルにスケーリングをかけます。
通常はモデル全体にスケーリングがかかってしまいますが、
グループを指定することで、グループを持つ面にだけスケーリングがかかるようになります。ここではSTEP2で作成したupfaceグループを指定して、上方向を向いた面にだけスケーリングをかけています。
STEP4: PolyExtrudeでメッシュを内側に押しこむ
PolyExtrudeを利用して、メッシュを内側に押し込みます。
![]()
STEP5: PolyExtrudeでメッシュを押し込み、穴を作る
PolyExtrudeを利用して、STEP4で押し込んだメッシュのFront部分を押し込んで穴を作ります。
![]()
ワッフルっぽいモデルになりました。
STEP6: VDBを利用して丸みを作る
ポリゴンをVDB(ボクセルの集まり; ボリュームデータ)に変換してそれを再びポリゴンに変換しなおす、という加工を行います。
結果として丸みを帯びたポリゴンを得ます。STEP 6.1: VDB from Polygonsノードを利用して、PolygonをVDBへ変換
ボクセルの集まりになりました。
STEP 6.2: Convert VDBノードを利用して、VDBをPolygonへ変換
Convert VDBノードのConvert ToにPolygonを指定します。
丸みを帯びたワッフル3Dモデルになりました。
モデルの頂点が多すぎる
モデルの頂点数を見ると約13万になっており、Unityで扱うには頂点数が多すぎます。
STEP7: PolyReduceでポリゴン数を削減(リダクション)
PolyReduceノードを利用することでポリゴン数を削ることができます。(リダクション)
PolyReduceでポリゴンを5%に削った場合、以下のようになります。
![]()
頂点数を見ると5000近くまで削ることができました。
Unityで扱うのに良い感じの数です。
STEP8: 法線の再計算
Normalノードを利用して、モデル法線の再計算を行います。
STEP9: UV展開
補足: UVの確認
UV ViewでUVを確認
SceneViewにマウスを載せた状態でSpace+5を押してUV Viewを開くと、
UVがちょうど0-1の正方形に収まっていることが確認できます。
SceneViewにマウスを載せた状態でSpace + 1を押すと元のPerspectiveViewに戻ります。
補足: UV Quick ShadeノードでUVを表示
UV Quick Shadeノードを利用すると、モデルにUVを重ねて表示させることができます。
![]()
STEP10: OBJファイルとしてエクスポートする
ROP Geometry Outputノードを利用することで、モデルデータをOBJファイルとして出力することができます。
STEP11: Unityでワッフルを表示
ワッフルのOBJファイルをUnity上で表示させると以下のようになります。
作業その2: SubstanceDesignerでテクスチャを作る
PBR用テクスチャをSubstance Designerで作ります。
準備: Substanceの設定を英語にしておく
Substanceのプリファレンスから言語を英語にしておきます。
設定の変更を反映するためには一度SubstanceDeisgnerを終了し、再度起動する必要があります。
STEP1: 新規Substance作成
Metallic/RoughnessのPBRを選び、グラフ名にWaffleを入力して新規Substanceを作成します。
新規Substanceを作成すると、出力用のノードが5つ持ったグラフが作成されます。
今回はHeightマップは使用しないので、Height Outputノードは削除しておきます。
簡単な画面説明
STEP2: ワッフルの3Dモデルを取り込む
次に、先程Houdiniで作成したワッフルの3DモデルをSubstanceDesignerに取り込みましょう。
画面左にあるエクスプローラーのウィンドウのPackageを右クリックし、Link -> 3D Meshを選択します。
エクスプローラーのウィンドウにwaffleが追加されるので、これを3D Viewへドラッグ&ドロップします。
Substanceグラフと3D Viewの関連付けが外れてしまうので、Substanceグラフを3D Viewへドラッグ&ドロップします。
Substanceグラフが3D Viewへ反映されるようになり、テカテカするようになりました。
初期状態のSubstanceグラフはMetallic=1であるため、金属のような質感になっています。以上で下準備は終わりです。
これから実際にノードを組んで質感を作っていきます。
補足: ノードの作成方法
Graphウィンドウにマウスポインタを置いた状態で、スペースキーを押すとノード一覧が表示されます。
ノード一覧から目的のノードを選ぶことで、ノードを作成することができます。
ノードの名前を途中まで入力することで、ノードを絞り込むことができます。
STEP3: Metallic = 0にする
Uniform Colorノードを作成し、Color Mode = Grayscale, Output Color = 0 (最小値)にします。
![]()
これをMetallic Outputノードに接続すると、メタリックとして0が出力され、質感が非金属になります。
STEP4: Roughness = 1にする
STEP3.で作成したUniform Colorノードを複製(Ctrl + D)し、Output Color = 1 (最大値)にします。
Roughness Outputノードに接続すると、ラフネスとして1が出力されます。
つやつやした光沢は無くなり、ただの真っ黒なワッフルになりました。
色が黒いのは、BaseColor Outputノードが黒色(RGBA = (0,0,0,0))になっているためです。
STEP5: ワッフルに色を付ける
Uniform Colorノードで茶色を設定してみる
今度はColor Mode = Color、 RGBA = (149, 88, 38, 255)なUniform Colorノードを作成し、Base Color Outputノードに接続してみました。
ノイズを利用してリッチな色合いを作る
ただのノイズですが、なんとなく美味しそうに見えるような気がします。
使用したノードは Clouds 1 と Gradient Mapです。
STEP6. ワッフルに光沢をつける
先程は、ラフネスに1を設定していましたが、ラフネスを下げることで光沢が付くようになります。
例えば、0.01を設定した場合は以下のようになります。STEP7: 光沢にノイズを混ぜる
ノイズから作成した法線マップを利用することで、ワッフル表面に凸凹がつき、光沢が変化します。
光沢にバラツキが生まれ、リアルな感じがでたのではないでしょうか。
![]()
![]()
今回はClouds 2ノイズにNormalノードを接続し、これをNormal Output ノードに接続してみました。
NormalノードのIntensityには3を設定しています。
テクスチャ完成
複数のノイズを乗算する、Vector Morph Grayscaleで模様を変形させる、ハイトマップを使って凹凸をつけるなど、
いろいろなアレンジが考えられますが、長くなるので今回は割愛します。作業3: UnityのHDRP向けにエクスポートする
作成したワッフルのテクスチャをUnityのHDRP用に出力します。
HDRP向けに出力する方法は公式サイトにて紹介されていますが、自分でもやってみました。
https://docs.substance3d.com/integrations/working-with-hdrp-lwrp-172818842.htmlSTEP1: Unityのマテリアル確認
HDRP環境のUnityのマテリアルを見ると、Maskマップを設定する箇所があります。
ここにはMetallicやAO(アンビエントオクルージョン)、Detail、Smoothness(Roughnessを反転させたもの)を持つテクスチャを指定します。
これら4つの情報を1枚のテクスチャとしてまとめたものがMaskマップと呼ばれています。
STEP2: Maskマップの作成
RGBA MergeノードやInvert Grayscaleノードを以下のように接続してMaskマップを合成します。
STEP3: Maskマップ出力ノードを作成する
Outputノードを作成し、RGBA Mergeノードと接続します。
STEP4: テクスチャ出力・Unity取り込み
Substanceグラフを右クリックし、Export output as bitmapsを選択します。
テクスチャ出力先のパスを指定し、Export outpusをクリックしてテクスチャ出力します。
テクスチャ出力先にはUnityプロジェクト内のパスを指定しておくと、エクスポート後にすぐにUnity上で触れるので便利です。
作業4: Unity上でマテリアル設定
STEP1: マテリアルにテクスチャを割り当て
BaseColorとMaskマップとNormalマップをマテリアルに割り当てます。
割り当てたマテリアルをワッフルの3Dモデルに登録すると、以下のような見た目になります。
STEP2: Smoothnessを調整
マテリアルの Smoothness Remappingの部分を調整すると光沢が出るようになります。
STEP3: 法線Fix
完成
参考URL
Working with HDRP / LWRP
https://docs.substance3d.com/integrations/working-with-hdrp-lwrp-172818842.html
- 投稿日:2019-05-30T13:22:17+09:00
Unity2018へのアップデートでTextMeshProのエラー
発生し得るエラーは複数あります。
まずは公式が推奨する手順でアップデート作業をしましょう。アップデート手順
ここを参照してアップデート作業をします。
アップデート前の準備
最も重要な注意点としては、アップデートを始める前に全てのSceneを閉じてPrefabやTextMeshProがSceneから読み込まれないようにしておく ことです。
空のSceneを開いて他のSceneを閉じ、プロジェクトを保存しましょう。
そしてプロジェクトのバックアップも忘れずに。
アップデート
自分は 2017.4.17f1 → 2018.4.0f1 とアップデートしました。
TextMeshProが重複してるエラー
Multiple plugins with the same name 'tmpro_plugin' (found at 'Packages/com.unity.textmeshpro/Plugins/64 Bit Plugins/TMPro_Plugin.bundle' and 'Assets/TextMesh Pro/Plugins/64 Bit Plugins/TMPro_Plugin.bundle'). That means one or more plugins are set to be compatible with Editor. Only one plugin at the time can be used by Editor. UnityEditor.EditorApplication:Internal_CallGlobalEventHandler()2018.4で開くとTextMeshProが競合しているエラーが表示されます。
そこで、古いAsset配下のTextMeshProを削除します。ここでの注意点は、フォントアセットやSpriteなどの自分で作ったリソースは退避 しておきましょう。
正しくエラーが解消されればそのまま使えます。
TMproが参照されないエラー
本来ならば Windowタブに TextMeshPro > Window - TextMeshPro - Project Files GUID Remapping Tool が表示をされ、このツールを使えば古いTextMeshProの参照が新しいものに入れ替えられるのですが、そもそもWindowタブにTextMeshProがなく、Consoleには次のエラーが表示されました。
The type or namespace name 'tmpro' could not be found自分はここを見て、エディタをVS Codeに変更したら解消しました。
エディタの切り替えはPreferrences>External Script Editorから。
原因は完全には分かってませんが、VisualStudioがパッケージを上手く参照できずに発生してたエラーのようです。
改めてTextMeshPro > Window - TextMeshPro - Project Files GUID Remapping Tool を使ってTextMeshProの参照を直します。
その後、自分は再び使うエディタをVisualStudioに戻しました。
エラーは発生しませんでした。VisualStudioのバージョンが異なったり、MacではなくWindowsだと発生しないか、復旧手順が異なるかもしれません。
自分の環境
MacOS10.14.4
Visual Studio 2019 for Mac
Unity2017.4
→Unity2018.4
- 投稿日:2019-05-30T12:59:11+09:00
Oculus QuestとUnityで遊ぶノート (更新中)
この記事は
UnityでOculus Quest開発を行うための環境構築のノートです。
参考リンク
準備したもの
- Unity 2018.3.14f1
- Unity Integration (Unity Asset)
- Android Studio
Android開発環境のセットアップ
Oculus Questのセットアップ
- Device Setup - Oculus Quest
- adbのインストール Oculus go adb driver
- adb.exe へ環境変数pathを通す
- C:\Users<user_name>\AppData\Local\Android\Sdk\platform-tools
Oculusアプリで開発者モードをONする
- "設定" -> OculusQuestを選択して"接続" -> "その他の設定" -> "開発者モード" ON
OculusQuestとUSB接続する
- USB接続すると、OculusQuestにUSB接続許可ダイアログが表示される
- ダイアログが出ない場合は、USB接続しなおすか、OculusQuestを再起動するかする
- 接続確認
- コマンドプロンプトで、
adb devidesと打ち込み、下記のように表示されればOK- unknownが表示される場合は、USB接続しなおすか、OculusQuestを再起動するかする
D:\git\OculusQuestTest.git>adb devices List of devices attached 1PASH9AJWY9192 deviceUnityプロジェクトをセットアップ
- 新規プロジェクトをつくる
- AssetStoreから、"Oculus Integration"をインポートする
- Assets/Oculus/VR/Prefabs/OVRCameraRigをHierarchyへマウスドラッグする
- MainCameraを削除する
- OVRCameraRig -> OVR Manager -> TargetDevices を"Quest"へ変更する
- ProjectSettings -> Player
- Package Name
- Minimum API LevelをAPI Level 19へ
- XR Settings -> Virtual Reality SupportedをON
- "Android"側の"Vitrual Reality SDKs"を"Oculus"にする
//- Unityのメニューから"Oculus" -> "Tools" -> "Oculus Platform Tool"
// - "OVR Platform Tool" -> "Target Oculus Platform" -> "Oculus Quest"にするUnityプロジェクトをAndroidビルドする
- Unityで"Build Settings"を開く
- "Add Open Scenes"を押して、シーンを追加する
- "Android"を選択する
- "Run Devise" -> "Oculus Quest"を選択する
- "Switch Platform"を押す
- "Build And Run"を押す
apkをOculus Questへインストールする
adb installして、apkファイルをshellへドラッグアンドドロップ
つまずいた
D:\git\OculusQuestTest.git>adb install D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk Performing Streamed Install adb: failed to install D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install com.oculus.UnitySample without first uninstalling.]しかし、下記で解決した!!
(-r オプションつけた)D:\git\OculusQuestTest.git>adb install -r D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk Performing Streamed Install SuccessOculus Questで撮ったscreeshotsフォルダを取り出す
D:\git\OculusQuestTest.git>adb pull /sdcard/oculus/screenshots D:\git\OculusQuestTest.git\files /sdcard/oculus/screenshots/: 4 files pulled. 3.8 MB/s (209538 bytes in 0.052s)浮いてるトーフを眺めるVRアプリをつくったえらいすごい!!
- 投稿日:2019-05-30T12:59:11+09:00
Oculus QuestとUnityで遊ぶノート
この記事は
UnityでOculus Quest開発を行うための環境構築のノートです。
参考リンク
準備したもの
- Unity 2018.3.14f1
- Unity Integration (Unity Asset)
- Android Studio
Android開発環境のセットアップ
Oculus Questのセットアップ
- Device Setup - Oculus Quest
- adbのインストール Oculus go adb driver
- adb.exe へ環境変数pathを通す
- C:\Users<user_name>\AppData\Local\Android\Sdk\platform-tools
Oculusアプリで開発者モードをONする
- "設定" -> OculusQuestを選択して"接続" -> "その他の設定" -> "開発者モード" ON
OculusQuestとUSB接続する
- USB接続すると、OculusQuestにUSB接続許可ダイアログが表示される
- ダイアログが出ない場合は、USB接続しなおすか、OculusQuestを再起動するかする
- 接続確認
- コマンドプロンプトで、
adb devidesと打ち込み、下記のように表示されればOK- unknownが表示される場合は、USB接続しなおすか、OculusQuestを再起動するかする
D:\git\OculusQuestTest.git>adb devices List of devices attached 1PASH9AJWY9192 deviceUnityプロジェクトをセットアップ
- 新規プロジェクトをつくる
- AssetStoreから、"Oculus Integration"をインポートする
- Assets/Oculus/VR/Prefabs/OVRCameraRigをHierarchyへマウスドラッグする
- MainCameraを削除する
- OVRCameraRig -> OVR Manager -> TargetDevices を"Quest"へ変更する
- ProjectSettings -> Player
- Package Name
- Minimum API LevelをAPI Level 19へ
- XR Settings -> Virtual Reality SupportedをON
- "Android"側の"Vitrual Reality SDKs"を"Oculus"にする
//- Unityのメニューから"Oculus" -> "Tools" -> "Oculus Platform Tool"
// - "OVR Platform Tool" -> "Target Oculus Platform" -> "Oculus Quest"にするUnityプロジェクトをAndroidビルドする
- Unityで"Build Settings"を開く
- "Add Open Scenes"を押して、シーンを追加する
- "Android"を選択する
- "Run Devise" -> "Oculus Quest"を選択する
- "Switch Platform"を押す
- "Build And Run"を押す
apkをOculus Questへインストールする
adb installして、apkファイルをshellへドラッグアンドドロップ
つまずいた
D:\git\OculusQuestTest.git>adb install D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk Performing Streamed Install adb: failed to install D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install com.oculus.UnitySample without first uninstalling.]しかし、下記で解決した!!
(-r オプションつけた)D:\git\OculusQuestTest.git>adb install -r D:\git\OculusQuestTest.git\apk\OculusQuestTest.apk Performing Streamed Install SuccessOculus Questで撮ったscreeshotsフォルダを取り出す
D:\git\OculusQuestTest.git>adb pull /sdcard/oculus/screenshots D:\git\OculusQuestTest.git\files /sdcard/oculus/screenshots/: 4 files pulled. 3.8 MB/s (209538 bytes in 0.052s)浮いてるトーフを眺めるVRアプリをつくったえらいすごい!!
- 投稿日:2019-05-30T12:23:59+09:00
Unity Exploderアセットで、"Tag: Exploder is not defined."とでる場合
- Exploder Object
- Exploder Singleton
この2つがあればいいと思っていたのですが、
何かのタイミングで
Tag: Exploder is not defined.
というエラーが頻発するようになり、
デモシーンを確認するとFragmentというスクリプト使っているようなのでこれも置くようにしたら、
エラーがなくなりました。ただ、このfragment何もしなくても、問題なく生成される場合もあるので、なかなか気づかない。
改善されました。
TIPS
また、exploderアセットを使う場合、処理負荷が気になったところ、
破壊対象はすべてExploderタグをセットしておくと処理負荷が軽減されました。
(もともと楽してsingletonで消していたので、破壊対象が多い場合かなり違う)



















































































