v0.82.1 RuntimeImport VRMData

以下の手順で import します。

  1. VRMをパースして、GltfData を得る。

  2. GltfData から VRMData を得る。

  3. VrmData から RuntimeGltfInstance をロードする。

  4. RuntimeGltfInstance を使う。

サンプルの Assets\VRM\Samples\SimpleViewer\ViewerUI.cs も参照してください。

1. GltfData を得る

GltfData Load(string path)
{
    return new GlbFileParser(path).Parse();
}

GLB import も参照してください。

2. VRMData を得る

VRMData vrm = new VRMData(data);

3. Load する

async RuntimeGltfInstance Load(VRMData vrm)
{
    // 使用後に Dispose で VRMImporterContext を破棄してください。
    using(var loader = new VRMImporterContext(vrm))
    {
        var instance = await loader.LoadAsync();
        return instance;
    }
}

URP 向けに materialGenerator を指定する(実験)

materialGenerator 引き数(省略可能)を指定することで URP マテリアルを生成するようにカスタムできます。 指定しない場合は built-in 向けのデフォルトが使用されます。

async RuntimeGltfInstance Load(VRMData vrm)
{
    var materialGenerator = new VRMUrpMaterialDescriptorGenerator(vrm.VrmExtension);
    using(var loader = new VRM.VRMImporterContext(vrm, materialGenerator: materialGenerator))
    {
        var instance = await loader.LoadAsync();
        return instance;
    }
}
  • まだ URP 向け MToonShader が作成されていないので、UniUnlit にフォールバックします。

4. Instance

// SkinnedMeshRenderer に対する指示
instance.EnableUpdateWhenOffscreen();
// 準備ができたら表示する(デフォルトでは非表示)
instance.ShowMeshes();

使用後に以下のように破棄してください。関連する Asset(Texture, Material, Meshなど)も破棄されます。

// GameObject.Destroy(instance);

// RuntimeGltfInstance ではなくて、その GameObject を Destroy します。
GameObject.Destroy(instance.gameObject);