さっそくFirstVRに慣れていこうと思いまして手とオブジェクトの連携をかねてロケットパンチをやることにしました。
##作り方
まずSDKのシーンFVR/Samples/Scenesの中のOutputViewerを開きます。
そしてHierarchyのMuscleSensorViewerとDebug Toolsを消します。
こんな感じの見た目になるはず。
そしてゾンビと手を入れてこんな感じ
次にSceneManagerのSampleViewManagerを開きます。上記の青枠をクリックしてください。
変数として
public GameObject cube;
こんな感じのが宣言されているのでとりあえず
public GameObject Hand;
とかにして
Start(){
Hand = GameObject.Find(“Hand_right”);
}
とします。”Hand_right”の部分は適宜手に連動させたいオブジェクトの名前を入れてください。
次に適当にC#ファイルを作ります。ここではhandControlとします。
開いたらまずusing FVRlib;を書き、
FVRConnnection の変数を宣言しHierarchyにあるFVRオブジェクトのFVRConnectionコンポーネントを持ってきます。
以下の感じ、
FVRConnection fvr;
fvr = GameObject.Find("FVR").GetComponent<FVRConnection> ();
次に一定以上の加速度があると腕が飛び出していくようにします。
なんとそんな加速度が閾値以上かどうかの判定を行うときに使えるfvr.accel.magnitudeっていう変数があるんです。
ちなみに飛ばすときはVector3型の変数をバッファとして用意してあげる必要があります。
以下のコードをFixedUpdateの中に入れます。
コードはこんな感じ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FVRlib;
public class handControl : MonoBehaviour {
FVRConnection fvr;
GameObject hand;
Vector3 buffPosition;
// Use this for initialization
void Start () {
fvr = GameObject.Find("FVR").GetComponent<FVRConnection>();
hand = GameObject.Find ("Hand_right");
}
void FixedUpdate(){
if fvr.accel.magnitude > 1.0f || Input.GetKey("z")) {
buffPosition = hand.transform.position;
buffPosition.z += 1.0f;
hand.transform.position = buffPosition;
}
}
}
これを動かしたいオブジェクト(今回はHand_right)にアタッチしてスマホで実行してみます。
こんな感じ
さっそくFirstVRでこんなん作ったww#FirstVR pic.twitter.com/9QoSuM5a8P
— Satosh (@satosh28425184) 2018年4月26日
次回は加速度を利用してものを投げるのをやってみます。