xR Deveropers Japan Blog

xRTechが好き・興味がある方のコミュニティです。勉強会やスラックなどでの情報共有を行っています。興味のある方、お気軽にご参加ください^^プログラミングなど未経験の入門希望者も歓迎しています。

OculusGo HMDの方向に前進するコード解説メモ

f:id:k_mawa:20181207214536p:plain

概要

Oculus GoのHMDの向いている方向に沿って前進するコードを実装したときのメモです。 参考コード記事とともにご覧くださいませ。

デモ

コード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

//RigidBodyコンポーネント自動付加されます
[RequireComponent(typeof(Rigidbody))]

public class Walk : MonoBehaviour {

    Rigidbody m_Rigidbody;

    [SerializeField] float ForceGravity = 100f;
    [SerializeField] private Transform _centerEyeAnchor = null;
    [SerializeField] private float _moveSpeed = 2;

    // Use this for initialization
    void Start()
    {
        //Playerに付加されているRigidBodyコンポーネントの取得
        rb = GetComponent<Rigidbody>(); 
    }

    void FixedUpdate()
    {

        float x = 0.05f;
        float z = 0.05f;
        Vector2 touchPad = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);

        if (touchPad.x > 0.5 && -0.5 < touchPad.y && touchPad.y < 0.5) //キー右部押す
        {
            transform.Rotate(new Vector3(0.0f, 0.5f, 0.0f)); // 右回転
        }
        if (touchPad.x < -0.5 && -0.5 < touchPad.y && touchPad.y < 0.5) //キー左部押す
        {
            transform.Rotate(new Vector3(0.0f, -0.5f, 0.0f));  //左回転
        }
        if (touchPad.y > 0.5 && -0.5 < touchPad.x && touchPad.x < 0.5) //キー上部押す
        {   
            //CenterEyeAnchorの前に向いている方向へRigidBodyポジションを移動                     
            rb.position += _centerEyeAnchor.transform.forward * z;

        }
        if (touchPad.y < -0.5 && -0.5 < touchPad.x && touchPad.x < 0.5) //キー下部押す
        {
            z -= 0.1f;
            // 単なるバック
            rb.position += this.transform.forward * z;
        }

        //プレイヤー落下速度調整
        rb.AddForce(Vector3.down * ForceGravity, ForceMode.Acceleration); 
    }
}

CenterEyeAnchorとPlayerオブジェクトのヒエラルキーの指定メモ画像です f:id:k_mawa:20181207214536p:plain

参考・一部引用記事

参考引用しました。チュートリアルとしても素晴らしいです。 qiita.com