20190530のUnityに関する記事は10件です。

【Unity】オンラインゲームを作るためのツール選択

こんにちは、ブログ「学生ブロックチェーンエンジニアのブログ」を運営しているアカネヤ(@ToshioAkaneya)です。

【Unity】オンラインゲームを作るためのツール選択

オンラインゲームの中でもリアルタイム通信が必要なタイプのゲームを考えます。
自分の経験からで恐縮ですが、このようなゲームを作る場合はPhotonを利用するか、自前WebSocketサーバーを作るかのどちらかが良いと思います。(自分はこの2パターンの経験があります。)

結論から申し上げると、まずはPhotonを利用して作り始めるのがオススメです。
Photonを使えばサーバーのコーディングをすることなくリアルタイム通信が出来ます。また、無料枠では20人までの同時接続が可能です。20人も可能であれば、開発中では十分でしょう。

自前WebSocketサーバーを建てるのはPhotonでは実現出来ないことを実現したいときに行うと良いです。

はてなブックマーク・Pocketはこちらから

はてなブックマークに追加
Pocketに追加

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityでARKit2 - 第二回 -

UnityでARアプリ開発をやってみたい 第二回

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やります。

今回はこのくらいで。

ではでは。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Androidスマホで自由に動き回れるVRアプリを作る方法(Unity・ARCore・Google VR(Cardboard))

こんな感じに部屋の中を動き回れるものを作ることができます。

ARCoreVR_drop16.gif
© Unity Technologies Japan/UCL

いわゆる、6DoFっていうやつです。
ARCoreに対応しているスマホと、スマホ装着型のVRゴーグルを用意すれば誰でも試せます。
スマホ内蔵のカメラを使いますが、マーカーなどは必要ありません。

補足

  • 古い機種やiPhoneといったARCore非対応の端末には使えません。(iPhoneの場合は、ARKitを使えばいけるかもしれないけど、試したことはありません)
  • ARCoreを使っていますが、ARアプリではありません。(カメラ画像とモデル表示の位置がずれてしまうため、そのままではARでは使えないです)
  • 自分の足で動きまわることができますが、なるべく広い部屋で行い、壁などにぶつからないように注意してください。
  • 起動時にはカメラ画像が表示されますが、その時は床を映してください。床を認識次第、VRの画面に移行します。

用意するもの

手順

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.cs
using 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枚で済んでしまったので、それを記事として作ってみました。
これだけだと、いろいろ不都合な点がありますが、等身大のキャラクターが見れるだけでも結構面白いですので、試してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityを使ったMultiple APKのやりかた

Multiple APK とは

App Bundleより昔にあったやりかたで、
API levelやCPU architectureなどでインストールするAPKを切り替えることができる機能のこと。

基本的にはApp Bundleで十分なので使用する必要はない。
しかし、プラグインの事情など特別な理由によりAPKファイルを切り替えたい時に使用できる。

前提知識

Google Play Consoleにアップロードするため、リリースのやり方は別途調べておく必要がある。
- 私は https://qiita.com/tsucchi13/items/11b3d9c8f99ceedb4b47 を参照しました。

手順

  1. Player Settings - Android - Publishing Settings を設定しておく
  2. Player Settings - Android - Configuration を変更する
  3. Player Settings - Android - Identification - Bundle Version Code を被らないように変更する
  4. apkを出力し、必要な分だけ2に戻る
  5. Google Play ConsoleにすべてのAPKファイルをそれぞれアップロードする image.png
  6. 公開する

要点

インストール時に使用されるAPKファイルは以下のように選択されるようなので、そこで制御を行う。
事実上、複数のAPKファイルさえ用意できればBundle Version Codeを管理できさえすれば、他には何もする必要はない。
(パックするツールがあるのかと探したが、その必要がなかった)

  1. 該当の端末で使用できるAPKファイルをフィルタリングする
    • API levelやCPU architectureなどでフィルタリングされる
  2. フィルタリングされたものの中でBundle Version Codeが一番大きいものが採用される
    • そのため、下位互換のあるもの(ARM64がARMv7のものを実行できるなど)については優先するものほど大きい値にする必要がある
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Photon VoiceでMicrophone Deviceの抜き差しに対応する方法

こんなのわかるか!!

Photon Voiceでマイクの抜き差し時にデバイスの更新がかからなかったので、いろいろ調べたけどどこにも書いておらず、最終的にソースコード読むことで解決しました。

//マイクデバイスのリフレッシュ
PhotonVoiceNetwork.PhotonMicrophoneEnumerator.Refresh();
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Houdini + SubstanceDesigner + Unity HDRP】HDRPなワッフルをプロシージャルに作ってみる。

はじめに

HoudiniとSubstance Desigerでワッフルを作る方法を紹介します。
テクスチャデータは使わず、すべてプロシージャルに作っています。

Substance Designer上での表示

Unity上での表示

環境

Windows 10

Houdini Apprentice 17 (無料)
Substance Designer 2019 (有料)
Unity 2018.3.11f1 (無料)

作業その1: Houdiniでワッフルを作る

以下のようなワッフルをHoudiniを使ってモデリングします。

STEP1: 箱を作る

Boxノードを利用して、箱を作ります。

補足: ワイヤーフレームのオーバー表示のON/OFF

Scene Viewにマウスポインタを載せた状態で Shift+Wを押すと、ワイヤーフレームのオーバー表示のON/OFFを切り替えることができます。

STEP2: 上を向いている面を選択

Groupノードを利用して、上方向を向いた面を選択します。

補足: ワイヤーフレーム表示のON/OFF

Scene Viewにマウスポインタを載せた状態で Wを押すと、ワイヤーフレーム表示のON/OFFを切り替えることができます。

STEP3: 上方向の面を小さくする

Transformを利用して、モデルにスケーリングをかけます。
通常はモデル全体にスケーリングがかかってしまいますが、
グループを指定することで、グループを持つ面にだけスケーリングがかかるようになります。

ここではSTEP2で作成したupfaceグループを指定して、上方向を向いた面にだけスケーリングをかけています。

STEP4: PolyExtrudeでメッシュを内側に押しこむ

PolyExtrudeを利用して、メッシュを内側に押し込みます。

STEP5: PolyExtrudeでメッシュを押し込み、穴を作る

PolyExtrudeを利用して、STEP4で押し込んだメッシュのFront部分を押し込んで穴を作ります。

ワッフルっぽいモデルになりました。

STEP6: VDBを利用して丸みを作る

ポリゴンをVDB(ボクセルの集まり; ボリュームデータ)に変換してそれを再びポリゴンに変換しなおす、という加工を行います。
結果として丸みを帯びたポリゴンを得ます。

image.png

image.png

STEP 6.1: VDB from Polygonsノードを利用して、PolygonをVDBへ変換

ボクセルの集まりになりました。

STEP 6.2: Convert VDBノードを利用して、VDBをPolygonへ変換

Convert VDBノードのConvert ToにPolygonを指定します。
image.png

丸みを帯びたワッフル3Dモデルになりました。

モデルの頂点が多すぎる

モデルの頂点数を見ると約13万になっており、Unityで扱うには頂点数が多すぎます。
image.png

STEP7: PolyReduceでポリゴン数を削減(リダクション)

PolyReduceノードを利用することでポリゴン数を削ることができます。(リダクション)
image.png

PolyReduceでポリゴンを5%に削った場合、以下のようになります。

頂点数を見ると5000近くまで削ることができました。
Unityで扱うのに良い感じの数です。
image.png

STEP8: 法線の再計算

Normalノードを利用して、モデル法線の再計算を行います。
image.png

STEP9: UV展開

UV Textureノードを利用して、UV展開を行います。
image.png

補足: UVの確認

UV ViewでUVを確認

SceneViewにマウスを載せた状態でSpace+5を押してUV Viewを開くと、
UVがちょうど0-1の正方形に収まっていることが確認できます。
image.png

SceneViewにマウスを載せた状態でSpace + 1を押すと元のPerspectiveViewに戻ります。

補足: UV Quick ShadeノードでUVを表示

UV Quick Shadeノードを利用すると、モデルにUVを重ねて表示させることができます。

STEP10: OBJファイルとしてエクスポートする

ROP Geometry Outputノードを利用することで、モデルデータをOBJファイルとして出力することができます。
image.png

STEP11: Unityでワッフルを表示

ワッフルのOBJファイルをUnity上で表示させると以下のようになります。

作業その2: SubstanceDesignerでテクスチャを作る

PBR用テクスチャをSubstance Designerで作ります。

準備: Substanceの設定を英語にしておく

Substanceのプリファレンスから言語を英語にしておきます。
image.png

image.png

設定の変更を反映するためには一度SubstanceDeisgnerを終了し、再度起動する必要があります。

STEP1: 新規Substance作成

まずは新規Substanceを作成します。
image.png

Metallic/RoughnessのPBRを選び、グラフ名にWaffleを入力して新規Substanceを作成します。
image.png

新規Substanceを作成すると、出力用のノードが5つ持ったグラフが作成されます。
image.png

今回はHeightマップは使用しないので、Height Outputノードは削除しておきます。

簡単な画面説明

image.png

STEP2: ワッフルの3Dモデルを取り込む

次に、先程Houdiniで作成したワッフルの3DモデルをSubstanceDesignerに取り込みましょう。

画面左にあるエクスプローラーのウィンドウのPackageを右クリックし、Link -> 3D Meshを選択します。
image.png

先程作成したOBJファイルを選択して開きます。
image.png

エクスプローラーのウィンドウにwaffleが追加されるので、これを3D Viewへドラッグ&ドロップします。
image.png

3D Viewにワッフルが表示されます。
image.png

Substanceグラフと3D Viewの関連付けが外れてしまうので、Substanceグラフを3D Viewへドラッグ&ドロップします。
image.png

Substanceグラフが3D Viewへ反映されるようになり、テカテカするようになりました。
初期状態のSubstanceグラフはMetallic=1であるため、金属のような質感になっています。

image.png

以上で下準備は終わりです。

これから実際にノードを組んで質感を作っていきます。

補足: ノードの作成方法

Graphウィンドウにマウスポインタを置いた状態で、スペースキーを押すとノード一覧が表示されます。
ノード一覧から目的のノードを選ぶことで、ノードを作成することができます。
image.png

ノードの名前を途中まで入力することで、ノードを絞り込むことができます。
image.png

STEP3: Metallic = 0にする

Uniform Colorノードを作成し、Color Mode = Grayscale, Output Color = 0 (最小値)にします。
 

これをMetallic Outputノードに接続すると、メタリックとして0が出力され、質感が非金属になります。
image.png

STEP4: Roughness = 1にする

STEP3.で作成したUniform Colorノードを複製(Ctrl + D)し、Output Color = 1 (最大値)にします。

Roughness Outputノードに接続すると、ラフネスとして1が出力されます。
image.png

つやつやした光沢は無くなり、ただの真っ黒なワッフルになりました。
色が黒いのは、BaseColor Outputノードが黒色(RGBA = (0,0,0,0))になっているためです。
image.png

STEP5: ワッフルに色を付ける

Uniform Colorノードで茶色を設定してみる

今度はColor Mode = Color、 RGBA = (149, 88, 38, 255)なUniform Colorノードを作成し、Base Color Outputノードに接続してみました。

image.png
image.png

茶色い感じのワッフルになりました。
image.png

ノイズを利用してリッチな色合いを作る

ノイズを使うと、リッチな色味を作ることが可能です。

ただのノイズですが、なんとなく美味しそうに見えるような気がします。

使用したノードは Clouds 1 と Gradient Mapです。
image.png

image.png

STEP6. ワッフルに光沢をつける

先程は、ラフネスに1を設定していましたが、ラフネスを下げることで光沢が付くようになります。
例えば、0.01を設定した場合は以下のようになります。

STEP7: 光沢にノイズを混ぜる

ノイズから作成した法線マップを利用することで、ワッフル表面に凸凹がつき、光沢が変化します。
光沢にバラツキが生まれ、リアルな感じがでたのではないでしょうか。

今回はClouds 2ノイズにNormalノードを接続し、これをNormal Output ノードに接続してみました。
NormalノードのIntensityには3を設定しています。
image.png

テクスチャ完成

複数のノイズを乗算する、Vector Morph Grayscaleで模様を変形させる、ハイトマップを使って凹凸をつけるなど、
いろいろなアレンジが考えられますが、長くなるので今回は割愛します。

作業3: UnityのHDRP向けにエクスポートする

作成したワッフルのテクスチャをUnityのHDRP用に出力します。

HDRP向けに出力する方法は公式サイトにて紹介されていますが、自分でもやってみました。
https://docs.substance3d.com/integrations/working-with-hdrp-lwrp-172818842.html

STEP1: Unityのマテリアル確認

HDRP環境のUnityのマテリアルを見ると、Maskマップを設定する箇所があります。
ここにはMetallicやAO(アンビエントオクルージョン)、Detail、Smoothness(Roughnessを反転させたもの)を持つテクスチャを指定します。
これら4つの情報を1枚のテクスチャとしてまとめたものがMaskマップと呼ばれています。

STEP2: Maskマップの作成

RGBA MergeノードやInvert Grayscaleノードを以下のように接続してMaskマップを合成します。

STEP3: Maskマップ出力ノードを作成する

Outputノードを作成し、RGBA Mergeノードと接続します。
image.png

Outputノードは以下のように設定します。
image.png

STEP4: テクスチャ出力・Unity取り込み

Substanceグラフを右クリックし、Export output as bitmapsを選択します。
image.png

テクスチャ出力先のパスを指定し、Export outpusをクリックしてテクスチャ出力します。
テクスチャ出力先にはUnityプロジェクト内のパスを指定しておくと、エクスポート後にすぐにUnity上で触れるので便利です。
image.png

以下のようなテクスチャが出力されます。
image.png

作業4: Unity上でマテリアル設定

STEP1: マテリアルにテクスチャを割り当て

BaseColorとMaskマップとNormalマップをマテリアルに割り当てます。
image.png

割り当てたマテリアルをワッフルの3Dモデルに登録すると、以下のような見た目になります。
image.png

STEP2: Smoothnessを調整

マテリアルの Smoothness Remappingの部分を調整すると光沢が出るようになります。
image.png
image.png

STEP3: 法線Fix

image.png

image.png

完成

みずみずしい感じのワッフルができました。
image.png

参考URL

Working with HDRP / LWRP
https://docs.substance3d.com/integrations/working-with-hdrp-lwrp-172818842.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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から。
image.png

原因は完全には分かってませんが、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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oculus QuestとUnityで遊ぶノート (更新中)

この記事は

UnityでOculus Quest開発を行うための環境構築のノートです。

参考リンク

準備したもの

Android開発環境のセットアップ

Oculus Questのセットアップ

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  device

Unityプロジェクトをセットアップ

  • 新規プロジェクトをつくる
  • 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
Success

Oculus 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アプリをつくったえらいすごい!!

com.oculus.UnitySample-20190602-170117.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oculus QuestとUnityで遊ぶノート

この記事は

UnityでOculus Quest開発を行うための環境構築のノートです。

参考リンク

準備したもの

Android開発環境のセットアップ

Oculus Questのセットアップ

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  device

Unityプロジェクトをセットアップ

  • 新規プロジェクトをつくる
  • 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
Success

Oculus 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アプリをつくったえらいすごい!!

com.oculus.UnitySample-20190602-170117.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity Exploderアセットで、"Tag: Exploder is not defined."とでる場合

image.png
Exploderアセットで、

  • Exploder Object
  • Exploder Singleton

この2つがあればいいと思っていたのですが、
何かのタイミングで

Tag: Exploder is not defined.
というエラーが頻発するようになり、
デモシーンを確認するとFragmentというスクリプト使っているようなのでこれも置くようにしたら、
エラーがなくなりました。

ただ、このfragment何もしなくても、問題なく生成される場合もあるので、なかなか気づかない。

Fragmentスクリプトを追加すると
image.png

改善されました。

TIPS

また、exploderアセットを使う場合、処理負荷が気になったところ、
破壊対象はすべてExploderタグをセットしておくと処理負荷が軽減されました。
(もともと楽してsingletonで消していたので、破壊対象が多い場合かなり違う)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む