仮想と物理とエトセトラ

xRや物理とかごった煮の備忘録的技術ブログ

MRTK(2.7.2)のExampleを試す その4 (Demos - Gltf)

今回は下記の続きです。

xr-physics-work-etc.hatenablog.com

前提

今回の前提は以下です。
Unity 2019.4.17f1
MRTK 2.7.2

準備

いつものようにPackage Managerからデモをインポートします。
f:id:napo909:20211219102128p:plain

Glb-Loading-Demo

このシーンは、インターネット上にあるglbモデルをUnityで取り扱えるオブジェクトとして表示するデモです。
f:id:napo909:20211219102800p:plain

glbまたはgltfは、JSONを用いて3Dモデルなどを表現する形式です。
標準のUnityでは動的読み込みなどできませんが、MRTKのGltf Importerを用いることで実現できます。

ja.wikipedia.org

GltfUtility.cs

このスクリプトで、gltfまたはglb形式のモデルデータを読み込み、Scene上に表示することができます。

github.com

staticなクラスのため、基本的にスクリプト中から使用することが前提です。
主な使い方の流れは以下です。

[1] 下記メソッドの中から適したものを使用してGltfObjectを取得する。

・ GetGltfObjectFromGlb(Byte[])
    glbファイルのバイト列からGltfObjectを取得する。  
・ GetGltfObjectFromJson(String)  
    Jsonファイルの内容(文字列)からGltfObjectを取得する。  
・ ImportGltfObjectFromPathAsync(String)
    ファイルパスからGltfObjectを取得する。(gltf, glbファイル両対応)  

[2] 取得したGltfObjectから下記メソッドをどちらか実施することで、Scene上にGltfオブジェクトを元にしたGameObjectを表示できる。

・ Construct()  
・ ConstructAsync()  

Rest.cs

このスクリプトは、直接Gltfのデモとして関係しているわけではないですが、初見のため取り扱っておきます。
このスクリプトに含まれるメソッドを使用することで、REST APIを用いてPOST, GETが実施できます。

github.com

staticなクラスのため、基本的にスクリプト中から使用することが前提です。
下記がよく使用されると思われるメソッドです。

  • GetAsync
    Getリクエストを送る場合に使用するメソッド。
    引数:
    query : URLを入力  
    headers : リクエストに使用するオプションのヘッダ  (オプション)  
    timeout : タイムアウト時間  (オプション)  
    downloadHandler : ダウンロード時に使用するオプションのハンドラ  (オプション)  
    readResponseData : ダウンロードハンドラの使用有無  (オプション)  
    certificateHandler : 証明書検証に使用するハンドラ  (オプション)  
    disposeCertificateHandlerOnDispose : UnityRequest破棄時に証明書検証ハンドラを破棄するか否か  (オプション)   
  • PostAsync
    POSTリクエストを送る場合に使用するメソッド。
    引数:
    query : URLを入力  
    formData : POSTするWWForm型のForm Data(※)  
    jsonData : POSTするJsonデータ(※)
    bodyData : POSTするbyte列のデータ(※)  
    headers : リクエストに使用するオプションのヘッダ  (オプション)  
    timeout : タイムアウト時間  (オプション)  
    readResponseData : ダウンロードハンドラの使用有無  (オプション)  
    certificateHandler : 証明書検証に使用するハンドラ  (オプション)  
    disposeCertificateHandlerOnDispose : UnityRequest破棄時に証明書検証ハンドラを破棄するか否か  (オプション)   
    (※):オーバーロードされているため、どれか1つまたは使用しない  
  • PutAsync
    PUTリクエストを送る場合に使用するメソッド。
    引数:
    query : URLを入力  
    jsonData : PUTするJsonデータ(※)
    bodyData : PUTするbyte列のデータ(※)  
    headers : リクエストに使用するオプションのヘッダ  (オプション)  
    timeout : タイムアウト時間  (オプション)  
    readResponseData : ダウンロードハンドラの使用有無  (オプション)  
    certificateHandler : 証明書検証に使用するハンドラ  (オプション)  
    disposeCertificateHandlerOnDispose : UnityRequest破棄時に証明書検証ハンドラを破棄するか否か  (オプション)   
    (※):オーバーロードされているため、どれか1つ使用する  
  • DeleteAsync
    DELETEリクエストを送る場合に使用するメソッド。
    引数:
    query : URLを入力  
    headers : リクエストに使用するオプションのヘッダ  (オプション)  
    timeout : タイムアウト時間  (オプション)  
    readResponseData : ダウンロードハンドラの使用有無  (オプション)  
    certificateHandler : 証明書検証に使用するハンドラ  (オプション)  
    disposeCertificateHandlerOnDispose : UnityRequest破棄時に証明書検証ハンドラを破棄するか否か  (オプション)   

Gltf-Loading-Demo

このシーンでは、ローカルファイルからglbモデルを読み込んで表示するデモです。
f:id:napo909:20211219112934p:plain
デモを正しく実行するには、Assetディレクトリ中にStreamingAssetsディレクトリを作成し、デモ用ディレクトリ中のModelsをコピーする必要があります。
コピーをするには、サンプルシーン中のGltfExampleオブジェクトにアタッチされている、TestGltfLoadingコンポーネントに付与されているボタンを押下すると、コピーが実施できます。
正常にファイルが配置できると、表示されている警告が消えます。
f:id:napo909:20211219112836p:plain

そのあと、Unity上で実行するとglbモデルから構成されたアボカドがシーン上に表示されます。

使用しているスクリプトは、先ほど紹介したGltfUtility.csのImportGltfObjectFromPathAsyncで共通しているため省略します。

キリが良いので今回はここまで。
次回はHandCoachのデモを取り扱います。