LeapMotion在unity中保姆级使用教程

一、插件

1、下载资源包,包括:Core为核心引擎,Interaction Engine为实现虚拟物体交互的插件,hands提供手势渲染等。

Ultraleap Plugin for Unity — Ultraleap for Developers (leapmotion.com)https://developer.leapmotion.com/unity

2、unity中导入

3、安装Magic Leap XR Plugin

4、准备完成

二、场景创建 

 1、在自己工程的场景需要添加以下,一个个说

 位置如下

 2、对于LeapHanController模块,其中的Hand Model Manager这样添,该拖的物体拖进来

这个脚本能选择使用的是AR还是电脑 

 3、 就这么简单,基本环境就搭建好了。

 三、使用方法

1、创建一个脚本,挂载在场景里

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

//引用
using Leap;
using Leap.Unity;

public class HandControl : MonoBehaviour
{
    LeapProvider provider;
    public HandModelBase leftHandModel;//左手
    public HandModelBase rightHandModel;//右手
    private const float rotate_sensitive = 1500f;  //旋转灵敏度
    private const float displacement_sensitive = 0.015f; //位移灵敏度
    private const float rotate_initial_value = 0f;  //旋转初始位置值
    float shake = 0;

    /// <summary>
    /// 判断条件  尽量勿动
    /// </summary>
    const float smallestVelocity = 0.1f;
    const float deltaVelocity = 0.000001f;
    const float deltaCloseFinger = 0.06f;

    void Start()
    {
        provider = FindObjectOfType<LeapProvider>() as LeapProvider;
    }
    void Update()
    {
        jjj();
    }
    public void jjj()
    {
        Frame frame = provider.CurrentFrame;
        foreach (Hand hand in frame.Hands)
        {
            if (hand.IsLeft && !hand.IsRight)
            {
                if (isOpenFullHand(hand))
                {
                    //Debug.Log("检测到手啦");
                    if (isMoveRight(hand))
                    {
                        shake += Time.deltaTime;//计手移动的时间
                        if (shake > 0.8f)
                        {
                            shake = 0;//时间大于*f后,时间置零,避免一直触发
                            Debug.Log("左掌向右");
                        }
                    }
                }
                if (isCloseHand(hand))
                {
                    if (isMoveRight(hand))
                    {
                        Debug.Log("左拳向右");
                    }
                }

            }
        }
    }
    /// <summary>
    /// 定义手势的基础类型
    /// </summary>
    /// <param name="hand"></param>
    /// <returns></returns>
    protected bool isMoveRight(Hand hand)// 手划向右
    {
        return hand.PalmVelocity.x > deltaVelocity && !isStationary(hand);//x,y,z控制三维轴,±控制轴方向
    }


    protected bool isMoveLeft(Hand hand)   // 手划向左
    {
        //x轴移动的速度   deltaVelocity = 0.7f    isStationary (hand)  判断hand是否禁止 
        return hand.PalmVelocity.x < -deltaVelocity && !isStationary(hand);
    }
    protected bool isMoveup(Hand hand)   // 手划向上
    {
        //x轴移动的速度   deltaVelocity = 0.7f    isStationary (hand)  判断hand是否禁止 
        return hand.PalmVelocity.y < deltaVelocity && !isStationary(hand);
    }
    protected bool isMovedown(Hand hand)   // 手划向下
    {
        //x轴移动的速度   deltaVelocity = 0.7f    isStationary (hand)  判断hand是否禁止 
        return hand.PalmVelocity.y < -deltaVelocity && !isStationary(hand);
    }

    protected bool isStationary(Hand hand)// 固定不动的 
    {
        return hand.PalmVelocity.Magnitude < smallestVelocity;
    }

    protected bool isCloseHand(Hand hand)     //是否握拳 
    {
        List<Finger> listOfFingers = hand.Fingers;
        int count = 0;
        for (int f = 0; f < listOfFingers.Count; f++)
        { //循环遍历所有的手~~
            Finger finger = listOfFingers[f];
            if ((finger.TipPosition - hand.PalmPosition).Magnitude < deltaCloseFinger)    // Magnitude  向量的长度 。是(x*x+y*y+z*z)的平方根。    //float deltaCloseFinger = 0.05f;
            {
                count++;
                //  if (finger.Type == Finger.FingerType.TYPE_THUMB)
                //  Debug.Log ((finger.TipPosition - hand.PalmPosition).Magnitude);
            }
        }
        return (count == 5);
    }
    protected bool isOpenFullHand(Hand hand)         //手掌全展开~
    {
        //Debug.Log (hand.GrabStrength + " " + hand.PalmVelocity + " " + hand.PalmVelocity.Magnitude);
        return hand.GrabStrength == 0;
    }
}

其它手势基础,可以参考这个:

LeapMotion初步学习_alnh9788的博客-CSDN博客https://blog.csdn.net/alnh9788/article/details/101463386

LEAPMotion VR 各种手势的判断~_miccall的博客-CSDN博客_leapmotion 手势识别https://blog.csdn.net/qq_31411825/article/details/54773801Leapmotion 左右上下前后挥动手势设计,动态手势_moonlightpeng的博客-CSDN博客https://blog.csdn.net/moonlightpeng/article/details/80191468?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.no_search_link&spm=1001.2101.3001.4242.2 判断每个手指的动作,参考这个:

unity + leapMotion 手势识别入门教程__Afra 的博客-CSDN博客_leapmotion手势识别https://blog.csdn.net/qq_39097425/article/details/84027730?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.essearch_pc_relevant

 2、就可以用了,Debug的一些语句就能触发了

3、 控制捏动作的脚本

这个圈圈判断是否捏住 

 4、抓取物体 

在需要交互的物体上加上Rigidbody和Interaction Behaviour两个组件

  • 10
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 你好!要使用 Leap Motion 控制 Unity3D 模型,需要进行以下步骤: 1. 下载并安装 Leap Motion SDK,官方网站为:https://developer.leapmotion.com/sdk-leap-motion-controller/ 2. 在 Unity3D 创建一个新项目。 3. 在 Unity3D 导入 Leap Motion SDK。在 Unity3D 菜单栏选择 Assets -> Import Package -> Custom Package,选择下载好的 Leap Motion SDK,点击 Import。 4. 创建一个空的 GameObject,并将 LeapHandController.cs 组件添加到它上面。 5. 在 Unity3D 创建一个可移动的模型(例如一个球)。 6. 将 Leap Motion 手势与模型控制器相连接。例如,当手掌向上移动时,模型也向上移动。 7. 进行测试并调整模型控制器以实现更好的控制效果。 希望这些步骤能够帮助你完成 Leap Motion 控制 Unity3D 模型的任务! ### 回答2: Leap Motion是一种新型的手势识别设备,可以跟踪人类手部的运动。它可以让我们通过手势控制应用程序,游戏或模型等内容。在Unity3D,我们可以将Leap Motion集成到场景,以实现手势控制3D模型的效果。 首先,我们需要在Unity3D安装Leap Motion SDK插件并导入我们想要使用的模型。然后,我们需要创建一个新的场景,将插件放置到场景,并将其与Leap Motion设备连接。 随着Leap Motion设备的逐渐普及,越来越多的开发者开始使用它来实现手势控制3D模型。与传统的按键和鼠标控制方式相比,Leap Motion可提供更自然、更直观的交互方式。它可以识别多种手势,如手指移动、手指握拳、手势旋转、手掌张开等等。通过合理地利用Leap Motion设备,我们可以实现更高效的用户体验。 然而,在使用Leap Motion进行手势控制时也有一些挑战。例如,用户的手势可能存在较大的误差,需要进行预处理和处理以确保正确的交互响应。此外,用户可能存在手势识别的困难,需要进行适当的训练和指导。 在实际开发过程,我们可以通过官方提供的文档、示例和开发者社区进行学习和交流,以进一步了解如何使用Leap Motion控制Unity3D模型。无疑,Leap Motion可以为Unity3D开发者提供更多创新的机会,让我们拭目以待未来的发展。 ### 回答3: Leap Motion 是一款独具特色的人体工程学产品,能够通过传感器实现手部及手指的动作捕捉。而 Unity3D 是一款游戏引擎,能够让开发者创建出具有游戏性能力的应用程序,包括游戏和 VR 等领域。那么,如何将 Leap Motion 应用到 Unity3D ,实现手势控制游戏模型呢? 首先,需要引入 Leap Motion SDK,并导入 Leap Motion 的插件。然后,通过调用 Leap Motion 提供的 API,可以获得手部及手指的数据信息,进而应用到游戏场景。 其次,需要编写脚本,来实现手势控制游戏模型,例如移动、缩放、旋转等操作。比如,在控制旋转时,可以将手指的旋转角度映射到游戏物体的旋转角度。 在应用 Leap Motion 控制 Unity3D 模型时,需要注意以下几点: 1. 必须保证 Leap Motion 传感器能够捕捉到手势数据,并调整好传感器的摆放角度,以保证传感器能够准确地捕捉到手势数据。 2. 需要通过调整脚本的参数,来实现手势控制的精度和敏感度,以便让用户更加流畅地控制游戏模型。 3. 对于不同类型的游戏模型,需要编写不同的控制代码,以适应不同的游戏场景。 总之,Leap Motion 控制 Unity3D 模型的应用,可以给用户带来更加直观、丰富的游戏体验。随着技术的不断发展,我们可以期待 Leap MotionUnity3D 之间更多的结合,带来更好的用户体验和应用场景。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值