Open3
VRMでのVRまたは1人称視点時の頭や髪の非表示について
前提
2種類のカメラがあるという想定
- VRカメラまたは1人称視点カメラ
- 3人称視点カメラ
GameObjectのLayerの設定
VRMFirstPersonOnly
-
VRMThirdPersonOnly
- このレイヤーを設定すべきGameObjectは Avatarの頭、髪、頭にあるアクセサリ等
VRカメラまたは1人称視点カメラの設定
VRMFirstPersonOnly
をCollingMaskに設定する
3人称視点カメラの設定
VRMThirdPersonOnly
をCollingMaskに設定する
参考資料
Runtime読み込みしたVRMに対して非表示にするには?
読み込まれたVRMのGameObject内のVRMInstanceを選択する。
頭はThirdPersonOnly
を設定
体はBoth
を設定
Autoの場合の挙動
VRMFirstPerson.Setup
をプログラムから実行することで、BothまたはThirdPersonOnlyに自動で設定される。
Vrm.FirstPerson.SetupAsyncについて
var vrmInstance = GetComponent<Vrm10Instance>();
var awaitCaller = new UniTaskAwaitCaller();
await vrmInstance.Vrm.FirstPerson.SetupAsync(vrmInstance.gameObject, awaitCaller).AsUniTask();
awaitCallerについては、LLMにコードを作ってもらった
private class UniTaskAwaitCaller : IAwaitCaller
{
public async Task NextFrame()
{
await UniTask.Yield(PlayerLoopTiming.Update);
}
public async Task Run(Action action)
{
action();
await UniTask.Yield(PlayerLoopTiming.Update);
}
public async Task<T> Run<T>(Func<T> action)
{
var result = action();
await UniTask.Yield(PlayerLoopTiming.Update);
return result;
}
public async Task NextFrameIfTimedOut()
{
await UniTask.Yield(PlayerLoopTiming.Update);
}
}