본문 바로가기
Project

[unity + leap motion project] 립모션 제스처 만들기 프로젝트 1번째 정리

by 배애앰이 좋아 2020. 3. 16.
반응형

< 기본 립모션 설치하고 사용해본 영상 >

 

결과 동영상 : https://youtu.be/jomCSk_XdIk

기본 립모션 인식 동영상

보다싶이 잘 작동하는 듯 잘 작동 못하는 듯합니다.

 

1. 립모션에서 프레임을 가져오는 방법

 

Frame : The Frame object is essentially the root of the data model and provides access to all the tracked entities. A new Frame is created at each update interval.

 

프레인 객체에는 기본적으로 데이터 모델의 루트이며 모든 추적 된 개체에 액세스 할 수 있습니다. 

업데이트 간격마다 새로운 프레임이 생성됩니다.

 

사용 방식 : 

Controller controller = new Controller ();
// wait until Controller.isConnected() evaluates to true
//...

Frame frame = controller.Frame ();
List<Hand> hands = frame.Hands;

 

 프레임 객체에는 Leap Motion 컨트롤러가 기록한 장면의 순간 스냅 샷이 포함되어 있습니다. 손, 손가락 및 도구는 Leap Motion 시스템에서 추적하는 기본 물리적 개체입니다. 연결된 Controller 객체 에서 추적 데이터가 포함 된 Frame 객체를 가져옵니다 . Controller 클래스  frame () 메서드를 사용하여 응용 프로그램에서 처리 할 준비가 될 때마다 프레임을 얻을 수 있습니다 .

 

if (controller.IsConnected) { //controller is a Controller object
    Frame frame = controller.Frame (); //The latest frame
    Frame previous = controller.Frame (1); //The previous frame
}

 

코드를 통해 최신 프레임과 이전 프레임을 얻을 수 있습니다. 

 

2. 립모션에서 손을 가져오는 방법 

 

Frame frame = controller.Frame (); // controller is a Controller object
if(frame.Hands.Count > 0){
    List<Hand> hands = frame.Hands;
    Hand firstHand = hands [0];
}

 

firstHand <- 손 객체의 정보들이 들어간게 된다. 그리고 만약 ID를 안다면

 

Hand knownHand = frame.Hand (handID);

 

위 코드를 통해 손의 데이터를 얻어올 수도 있다.

 

Note that the the leftmost() and rightmost() functions only identify which hand is farthest to the left or right. Use the Hand isLeft or isRight attribute to tell if a hand object represents a left or a right hand.

 

leftmost() rightmost()기능은 왼쪽이나 오른쪽으로 멀리있는 손 식별합니다. 

 isLeft또는 isRight속성을 사용하여 손 개체가 왼손 또는 오른손을 나타내는 지 알 수 있습니다.

 

< 유니티 SDK 설치 후 오브젝트 잡는 모션 >

 

결과 동영상 : https://youtu.be/wnCp2pA2ikY

물건 잡는 모션

< 앞 뒤로 오브젝트를 보내는 제스처 만들기 >

 

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

public class NewBehaviourScript : MonoBehaviour
{
    Controller controller;
    float HandPalmPitch;
    float HandPalmRoll;
    float HandPalmYam;
    float HandWristRot;

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        controller = new Controller();
        Frame frame = controller.Frame();
        List<Hand> hands = frame.Hands;
        if(frame.Hands.Count > 0)
        {
            Hand fristHand = hands[0];
        }

        HandPalmPitch = hands[0].PalmNormal.Pitch;
        HandPalmRoll = hands[0].PalmNormal.Roll;
        HandPalmYam = hands[0].PalmNormal.Yaw;
        
        HandWristRot = hands[0].WristPosition.Pitch;

        Debug.Log("Pitch : " + HandPalmPitch);
        Debug.Log("Roll : " + HandPalmRoll);
        Debug.Log("Yam : " + HandPalmYam);

        if(HandPalmYam > -2f && HandPalmYam < 3.5f)
        {
            Debug.Log("앞");
            this.transform.Translate(0, 0, 1 * Time.deltaTime);
        }else if(HandPalmYam < -2.2f)
        {
            Debug.Log("뒤");
            this.transform.Translate(0, 0, -1 * Time.deltaTime);
        }
    }
}

 

결과 동영상 : https://youtu.be/W0ap7OcQkK8

[립모션] 오브젝트 앞 뒤로 보내기 제스처

 

반응형

댓글