Skip to main content

VRM.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();
}

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);