トマシープが学ぶ

Unity/VR好きのミーハー初心者 記事内容は自分用のメモ。何も求めないで

Leap Motionで結界師になりたい。

 前回leapMotionのセッティングと開発の下調べをしました。

私の環境はMacSDKは2_3_0、Unity5.6.2です。

bibinbaleo.hatenablog.com

 実際自分で何か作ろうってなると、できることは大まかに2種類?かな

・手を動かして何かに触ったり、自分の手の動きを何かに反映させたりする系

ジェスチャーで何かを操作する系

ジェスチャーについて

せっかくなのでジェスチャーで何か作りたいのですが、2_3_0ではデフォルトで認識できるのは4種類の動きだけらしい。

[Unity][LeapMotion] 付属のジェスチャーを試してみる | ftvlog

キータップ(地面と垂直)

スクリーンタップ(地面と平行)

円を書く

スワイプ

とりあえずこちらを参考にスワイプの検知をしてみました。

itblog.protosolution.co.jp

new sceneにHand Controllerオブジェクト置いて、上の記事に載っていたスクリプトをつけました。

ジェスチャータイプの判定はusing Leap;を入れた上でこんな感じで書くらしいです。

if (gesture.Type == Gesture.GestureType.TYPESWIPE) {

ちなみにタイプは7種類表示されました。ただ2つ被っているし、invalidは無効っていう意味らしいのでやはり4つですね。

f:id:bibinbaleo:20170820223239p:plain

精度はイマイチですが一応反応はしてくれました。

f:id:bibinbaleo:20170820223113p:plain

 バージョンが上がれば手を握るとかピンチとか別のジェスチャーも認識できるっぽい。

mslgt.hatenablog.com

zabaglione.info

Pinch Move – Leap Motion Gallery

追加アセットを使えばもっと複雑なジェスチャーが認識できる??

Leap Motion社、サムズアップを認識するUnityアセットをリリース | VR Inside

 

そしてこちらの指でお絵かきもやりたかったけどTrail Rendererというスクリプトが2_3_0にはなかったのでとりあえず保留。

ただwindows環境でサンプルは遊べました。

tips.hecomi.com

tips.hecomi.com

手の種類を変える

hand contraollerオブジェクトの手の種類を変えるのはHand ControllerスクリプトのLeft Rightのとこを適当なプレハブに変えれば良い。

f:id:bibinbaleo:20170820225319p:plain

SaltLight~が自分の手に近かった。長さはcut,round,fullの3種類がある。

f:id:bibinbaleo:20170820225519p:plain

Rigidbody

前回の記事でもキューブを触るやつを作りましたが、リジッドボディをつけてもキューブがすごく暴れてしまいます。

nogson2.hatenablog.com

こちらを参考にMass(重さ)とか空気抵抗とかをいじってみましたが、あまり変化はありませんでした。

じゃあサンプルはどうやっているのかなって見ると、例えばPinchingSandboxというシーンではHandControllerの中のHand Physics ModelにPinchingHandという手の形をしたリジッドボディみたいなやつに、Grabbing Handというスクリプトをつけたものを適用していました。

f:id:bibinbaleo:20170821084905p:plain

f:id:bibinbaleo:20170821085257p:plain

またcubeの方にはRigidbodyの他にGrabbable Objectいうスクリプトをつけていました。

f:id:bibinbaleo:20170821085249p:plain

なので自分のシーンでも再現するために、サンプルシーン内にあったPinchingHandをプレハブ化してHand Physics Modelに適用。CubeにもGrabbable Objectをつけました。

f:id:bibinbaleo:20170821084912p:plain

そしたら握る動作をしたら握ることができました。全体的な挙動も少しは落ち着いたかな?

Animated GIF  - Find & Share on GIPHYwww.giphy.com

終結

いろいろ調べましたが初心に戻った結果、スワイプで結界を表示するものを作りました。 

Animated GIF  - Find & Share on GIPHYwww.giphy.com

オブジェクトの表示非表示はenableを使いました。最初はsetactiveでやっていたのですが、消えてくれなかった。

消す時にパーティクルを発生させています。

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

public class gesture : MonoBehaviour {

    Controller controller;
    HandModel hand_model;
    public GameObject kekkai;
    public ParticleSystem particle2;


    void Start () {
        controller = new Controller ();
        // スワイプのジェスチャーを有効にする
        controller.EnableGesture (Gesture.GestureType.TYPESWIPE);
    }

    void Update () {

        Frame frame = controller.Frame ();
        GestureList leap_gestures = frame.Gestures ();

        for (int i = 0; i < leap_gestures.Count; i++) {

            Gesture gesture = leap_gestures [i];
//            if (gesture.Type == Gesture.GestureType.TYPECIRCLE) {
//                Debug.Log ("maru");
//            }
             //ジェスチャーがスワイプだった場合
            if (gesture.Type == Gesture.GestureType.TYPESWIPE) {

                SwipeGesture Swipe = new SwipeGesture (gesture);
                // スワイプ方向
                Vector SwipeDirection = Swipe.Direction;
                // 0より小さかった場合(下げてる)
                if (SwipeDirection.y < 0) {
                    // Downのログを表示
                    Debug.Log ("Down");
                    //kekkai.SetActive (false);
                    GameObject kekkaiobj=kekkai.gameObject;
                    kekkaiobj.GetComponent<Renderer>().enabled = false;
                    particle2.Play ();

                    // 0より大きかった場合(上にあげてる)
                } else if (SwipeDirection.y > 0) {
                    // Upのログを表示
                    Debug.Log ("Up");
                    GameObject kekkaiobj=kekkai.gameObject;
                    kekkaiobj.GetComponent<Renderer>().enabled = true;
                    particle2.Stop ();
                }
            }
        }

    }
}

enableあたりはこちらからお借りしました。

teratail.com

パーティクルはPlay On Awakeを外した状態で、スクリプトからparticle2.Play ();、particle.Stop()で制御できました。

f:id:bibinbaleo:20170821161707p:plain

www.peliphilo.net

結界オブジェクトも、パーティクルもpublicで持ってきています。

f:id:bibinbaleo:20170821161710p:plain

妖はこちらからお借りしました。

3dwarehouse.sketchup.com

 手を結界師のコスチュームのやつにしたらそれっぽいかな?

f:id:bibinbaleo:20170821151008p:plain