本日は glTF の技術調査枠です。
KhronosGroup/UnityGLTF で glb ファイルの読み込みを試してみます。
今回は KhronosGroup/UnityGLTF を HoloLens2 プロジェクトで利用してみます。
KhronosGroup/UnityGLTFの準備
本記事は以下の記事の続きです。
bluebirdofoz.hatenablog.com
UnityEditor 上で確認した glb ファイルの読み込み動作を HoloLens2 アプリに移植します。
HoloLens2プロジェクトの準備
以下の記事を元に HoloLens2 用プロジェクトを作成します。
bluebirdofoz.hatenablog.com
今回は glb ファイルをオブジェクトとして読み込ませるため、シーンに Cube オブジェクトは配置していません。
KhronosGroup/UnityGLTFのUWP対応
KhronosGroup/UnityGLTF を UWP でビルドした場合、以下のようなエラーが発生することがあります。
error CS1703: Multiple assemblies with equivalent identity have been imported: ...
これは GLTFSerialization のビルドで Plugins フォルダ配下に UWP サポートのための SDK がコピーされることが原因です。
Unity のインストール時に UWP Support の追加を有効にしていると、dll が競合してしまいます。
対処として UnityGLTF/Runtime/Plugins/uap10.0.10586 配下に出力された以下の dll 以外は全て削除します。
・GLTFSerialization.dll
・Newtonsoft.Json.dll
アセットの UnityGLTF/Runtime/Plugins/uap10.0.10586 配下が更新されたことを確認して再ビルドを実行します。
これで UWP のビルドが行えます。
KhronosGroup/UnityGLTF を UWP で利用する準備ができました。
HoloLens2プロジェクトへのインポート
KhronosGroup/UnityGLTF を HoloLens2 プロジェクトにインポートします。
UnityGLTF フォルダをそのまま HoloLens2 プロジェクトにドラッグしてコピーすることでインポートできます。
GLTF の読み込みを行う以下のプレハブを Hierarchy にドラッグしてシーンに追加します。
・Assets/UnityGLTF/Runtime/Prefabs/GLTF.prefab
追加した GLTF を選択し、Inspector ビューを開きます。
各項目を以下の通り変更します。
・Transform
Scale X:0.1, Y:0.1, Z:0.1
・GLTFComponent
Use Stream : True Append Streaming Assets : False
更に Unity プロジェクト上で動作確認が行えるように、前回と同様に StreamingAssets ディレクトリを作成し、直下に Duck.glb を配置しました。
・StreamingAssets/Duck.glb
読み込み処理の実装
UnityEditor 上と HoloLens2 上で読み込み先のファイルを切り替えるため、以下のようなスクリプトを作成しました。
・SettingPath.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; // UnityGLTFの名前空間を追加 using UnityGLTF; // GLTFComponentのコンポーネントを利用する [RequireComponent(typeof(GLTFComponent))] public class SettingPath : MonoBehaviour { /// <summary> /// 読み込むファイル名 /// </summary> [SerializeField, Tooltip("読み込むファイル名")] public string filename; /// <summary> /// 起動時処理(Awake) /// </summary> void Awake() { // 参照ディレクトリのパスを環境によって切り替える string directorypath = ""; #if WINDOWS_UWP // HoloLens上での動作の場合、LocalAppData/AppName/LocalStateフォルダを参照する directorypath = Windows.Storage.ApplicationData.Current.LocalFolder.Path; #else // Unity上での動作の場合、Assets/StreamingAssetsフォルダを参照する directorypath = UnityEngine.Application.streamingAssetsPath; #endif // ディレクトリ直下の指定ファイル名のパスを取得する string filepath = System.IO.Path.Combine(directorypath, filename); // GLTFComponentの参照を取得する GLTFComponent component = GetComponent<GLTFComponent>(); // GLTFComponentに読み込みファイルパスを指定する component.GLTFUri = filepath; } }
作成した SettingPath スクリプトを GLTF オブジェクトにアタッチします。
GLTF を選択し、Inspector ビューを開きます。
SettingPath の項目を以下の通り変更します。
・SettingPath
Filename : Duck.glb
この状態で[再生]ボタンをクリックして動作確認を行います。
UnityEditor 上の動作では StreamingAssets 直下にある Duck.glb を読み込んで表示します。
長くなったので記事を分けます。
次回は HoloLens2 での動作確認です。
bluebirdofoz.hatenablog.com