はじめに
自分用のメモ。
oculus integrationを使わずXR Interaction Toolkitで動かしたい。
@4sk様の記事を大いに参考にさせていただいた。AvatarAnimationController.csの実装までは以下の点以外はたぶん一緒。
-
stopにはBasic Motionsのidleを使用
-
FinalIK部分は飛ばす
-
移動回転の動作はこれで実装
環境
- Windows11
- Oculus Link対応GPU搭載PC
- Unity version: 2021.3.15f1
- XR Interaction Toolkit Version 2.5.2
実装
AvatarAnimationController.csはoculus integrationを使っているので、XR Interaction Toolkitのみを使うように次のように変更。
AvatarAnimationController.cs
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
public class AvatarAnimationController : MonoBehaviour
{
private Animator controller;
public ActionBasedContinuousMoveProvider moveProvider;
void Start()
{
controller = GetComponent<Animator>();
ResetAnimation();
controller.SetTrigger("stop");
}
void ResetAnimation()
{
controller.ResetTrigger("walkF");
controller.ResetTrigger("walkB");
controller.ResetTrigger("walkR");
controller.ResetTrigger("walkL");
}
void Update()
{
// moveProviderからVector2型の値を取得
Vector2 inputVector = moveProvider.leftHandMoveAction.action.ReadValue<Vector2>();
float forwardMovement = inputVector.y;
float sidewaysMovement = inputVector.x;
// 前進Animation
if (forwardMovement > 0.1f)
{
ResetAnimation();
controller.SetTrigger("walkF");
}
// 後退Animation
else if (forwardMovement < -0.1f)
{
ResetAnimation();
controller.SetTrigger("walkB");
}
// 右横歩き
else if (sidewaysMovement > 0.1f)
{
ResetAnimation();
controller.SetTrigger("walkR");
}
// 左横歩き
else if (sidewaysMovement < -0.1f)
{
ResetAnimation();
controller.SetTrigger("walkL");
}
// idle状態
else if (Mathf.Approximately(forwardMovement, 0f) && Mathf.Approximately(sidewaysMovement, 0f))
{
ResetAnimation();
controller.SetTrigger("stop");
}
}
}
あとはインスペクターにContinuousMoveProvider枠があるはずだからそこにContinuousMoveProviderコンポーネント挿してるオブジェクトをぶち込むだけ。
結果
立ち止まると沈んだ。よくわからん。あとは一応想定内の動作かな。