VRMFirstPersonの使い方

VRMFirstPersonの設定

VRMFirstPersonではRendererに対して設定があります。

FirstPersonFlagレイヤー備考
Bothdefault一人称と三人称で分ける必要のない部分に指定します
ThirdPersonOnlyTHIRDPERSON_ONLY_LAYER一人称時に描画したくない部分に指定します
FirstPersonOnlyFIRSTPERSON_ONLY_LAYER三人称時に描画したくない部分に指定します。自動作成した頭部無しモデルが使います
AutoTHIRDPERSON_ONLY_LAYER実行時に一人称用モデルを自動で作成し、それをFIRSTPERSON_ONLY_LAYERに設定します

実行時にVRMFirstPerson.Setupを呼び出すことで、上記のレイヤー設定を行うことができます。明示的に外部から呼び出してください。

アプリケーションに追加の描画レイヤーを指定する

定数で以下のレイヤーを定義しています。

public class VRMFirstPerson : MonoBehaviour
{
    public const int FIRSTPERSON_ONLY_LAYER = 9;
    public const int THIRDPERSON_ONLY_LAYER = 10;

    // 省略
}
9番と10番にLayerを設定

実行時にSetupを呼び出して、カメラにLayerMaskを設定する

  • VRMFirstPerson.Setupの呼び出し
  • 一人称カメラとその他のカメラに対してLayerMask
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRM;

public class SetupExample : MonoBehaviour
{
    [SerializeField]
    Camera m_firstPersonCamera; // HMDのカメラ

    [SerializeField]
    LayerMask m_firstPersonMask; // HMDのカメラにセットするマスク default | FIRSTPERSON_ONLY_LAYER など

    [SerializeField]
    LayerMask m_otherMask; // HMDのカメラにセットするマスク default | THIRDPERSON_ONLY_LAYER など

    [SerializeField]
    VRMFirstPerson m_firstPerson;

    void Reset()
    {
        m_firstPerson = GameObject.FindObjectOfType<VRMFirstPerson>();
    }

    void Start()
    {
        foreach (var camera in GameObject.FindObjectsOfType<Camera>())
        {
            camera.cullingMask = (camera == m_firstPersonCamera)
                ? m_firstPersonMask
                : m_otherMask
                ;
        }

        // VRMFirstPersonの初期化
        if (m_firstPerson != null)
        {
            m_firstPerson.Setup();
        }
    }
}
最終更新 2018/05/29
VRM - humanoid 3d avatar format for VR