腕を振ると移動するという仕組み作りました。
public class PlayerMove : MonoBehaviour
{
public GameObject CenterCamera;
OVRInput.Controller LeftCon;
OVRInput.Controller RightCon;
float speed = 1.0f;
// Start is called before the first frame update
void Start()
{
LeftCon = OVRInput.Controller.LTouch;
RightCon = OVRInput.Controller.RTouch;
}
// Update is called once per frame
void Update()
{
float accLeft = OVRInput.GetLocalControllerAcceleration(LeftCon).magnitude;
float accRight = OVRInput.GetLocalControllerAcceleration(RightCon).magnitude;
float walkSpeed = 5.0f;
if ((accLeft >= walkSpeed && accRight >= walkSpeed) && ((OVRInput.Get(OVRInput.RawButton.LIndexTrigger) == true) && (OVRInput.Get(OVRInput.RawButton.RIndexTrigger) == true)))
{
var moveDirect = CenterCamera.transform.rotation.eulerAngles.y;
var moveQuate = Quaternion.Euler(0, moveDirect, 0);
if ((accLeft + accRight) > 50.0f)
{
speed = 3.0f;
}
else
{
speed = ((accLeft + accRight) / 50.0f) * 3.0f;
}
transform.position += moveQuate * Vector3.forward * speed * Time.deltaTime;
}
}
}
https://qiita.com/nanaki_pg/items/ba7fcf572cc74de41d65
ベースはこちらを参考にしております。
ありがとうございます。
実験してみて思ったこと。
なるべく左右の腕が動いているときに移動としたい。
両腕が同時に前に出たり、上にあげたりする時は移動しない。
など色々考えてみましたが、左右が動いている時というのは解決済み。
今のソースでは同時に腕を動かせば移動が始まるので、なんとか対応したかったけど、時間の関係であきらめ。
最終的にトリガーボタンを左右押している時に腕を動かすと歩く、早く動かすと走るという感じ。
これでロボット操作か、鬼ごっこか何かは作れそう。
まだ動くことを確認しただけなので、なんとも言えませんが、なんとなく身体を動かして移動するというのはVR酔い軽減になりそうな感じ。
物をつかみながら移動ができるのか(できるはずだけど)も実験したい。
またハンドトラッキングが将来的に採用されても、ドライバ次第だけど動くと思う。
トリガーボタンの代わりに手を握っているかを調べればいいかな。
グーの状態で手を動かせば移動ということです。
・・・イライラ棒なのですが、おそらく作れると思っていますが、その前にデバッグするほど広い空間がありません。
デバッグ中にガーディアンからはみ出したり壁に当たったりするな。