FirstPerson

FirstPerson と Renderer の可視制御

Runtime に FirstPerson 機能を有効にする

VR向け FirstPerson 設定の初期化手順です。

  1. Load する

  2. Vrm10Instance を取得する

  3. controller.Vrm.FirstPerson.SetupAsync を呼び出す

  4. ShowMeshes

async Task<RuntimeGltfInstance> LoadAsync(string path)
{
    var data = new GlbFileParser(path).Parse();
    if (!Vrm10Data.TryParseOrMigrate(data, true, out Vrm10Data vrm))
    {
        throw new System.Exception("vrm parse error !");
    }
    using (var loader = new Vrm10Importer(vrm))
    {
        // 1.
        var instance = await loader.LoadAsync();

        // 2.
        var controller = instance.GetComponent<Vrm10Instance>();

        // 3. The headless model that created is added to instance
        await controller.Vrm.FirstPerson.SetupAsync(controller.gameObject);

        // 4. 
        instance.ShowMeshes();

        return instance;
    }
}

VRMの推奨する VR 向けのカメラ構成

ヘッドマウントディスプレイを表すカメラ と その他のカメラという2種類のカメラを想定ます。 それぞれに対して、

  • FIRSTPERSON_ONLY_LAYER(このレイヤーを指定した gameObject はその他のカメラから消えます)

  • THIRDPERSON_ONLY_LAYER(このレイヤーを指定した gameObject はヘッドマウントディスプレイから消えます)

を定義します。 これにより、ヘッドマウント視点のアバターの描画を抑止しつつ、他者からは見えるようにします。

例: アバターの頭の描画を抑止して前が見えるようにする

VRMは、VRMFirstPersonOnlyVRMThirdPersonOnly という名前のレイヤーを予約しています。

Project Settings - Tags and LayersVRMFirstPersonOnlyVRMThirdPersonOnly を 設定してください。 サンプルでは、それぞれに 910 を割り当ています。

初期化時に layer を明示する

追加の引数で指定できます。

var created = await controller.Vrm.FirstPerson.SetupAsync(controller.gameObject, firstPersonOnlyLayer: 9, thirdPersonOnlyLayer: 10);