💬
unityでUniVRMを使ってGLB/GLTFを外部ファイルからロードする
はじめに
デスクトップマスコットの OSSとして以下のプロジェクトを開発しています。
こちらのプロジェクトでは、StreamingAssetsにglb/gltfを置くことで任意のモデルをロードできるようにしています。
環境
- Unity 6000.0.31f1(Build In Pipeline)
- UniVRM v0.128.1(PackageManager経由でインストール)
デモ
以下のモデルをお借りして、glb/gltfのロードをテストします。
ロード処理
UniVRMはUniGLTFが含まれています。 その中のAutoGltfFileParser
は、gltf
・ zip
, othersを自動的に判定をして切り替えてくれます。
以下のようにAutoGltfFileParser
にパスを渡すことで、ロードすることができます。
// ファイルを自動的にパースする
var parser = new AutoGltfFileParser(path);
実際には、以下のように処理を行いました。
private static async UniTask<GameObject> LoadGlbOrGltfModelAsync(string path)
{
try
{
// ファイルを自動的にパースする
var parser = new AutoGltfFileParser(path);
using var gltfData = parser.Parse();
// ImporterContextを作成
var importer = new ImporterContext(gltfData);
// IAwaitCallerを作成
var awaitCaller = new RuntimeOnlyAwaitCaller();
// モデルを非同期でロード
var gltfInstance = await importer.LoadAsync(awaitCaller);
// 必要に応じてメッシュを表示
gltfInstance.ShowMeshes();
// ルートのGameObjectを取得
var model = gltfInstance.Root;
return model;
}
catch (OperationCanceledException)
{
Log.Warning("モデルのロードがキャンセルされました。");
return null;
}
catch (Exception e)
{
Log.Error($"モデルのロード中にエラーが発生しました: {e.Message}");
return null;
}
}

midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion