Unity leapmotion开发实录(3)

Unity leapmotion开发实录(3)

本系列文章将会从一个初学者的脚步去讲解unity和leapmotion协同开发的一系列问题:

特:本人水平有限所以有错误请及时指正

本人也会引用一些代码如果有所侵犯请联系删除

自2015.11.22开始周更

因个人原因上周拖更现在更新

1,核心组件的使用。

在unity的官方文档中中很明显并没有给出如何去怎样很好的去使用给出的资源那我们先来明确一下 core asset中的资源都是用来干什么的

(1).handcontroller(以下简化为hc)

这个组件的目的就是在空间具象化出传感器检测到的手,以及传感器本身的检测范围,我们可以在inspector 面板中清楚地看到他的构成
这里写图片描述

这里的命名十分清楚,在hc的脚本中包含了左右手的模型,包括

图像模型
物理模型
工具模型
是否头戴的选项(主要用于协同oculus的开发)
以及其他一些可供调整的选项

让我们点进图像模型去看又会发现一些更有意思的问题
prefab

首先我们会发现这些图像模型都是一些预制体他们由统一的skeletalhand脚本控制 这是他们的灵魂所在

是这个脚本把一些零散的模型组合在一起成为一个手 统一之下既然会有skeletalhand 那么skeletalfinger 这些脚本共同控制着在场景中手的运动是符合人体规律,也符合数据的(虽然在具体过程中还是会出现偏差和bug)

了解了由骨骼拼成的图像化手的模型,再来了解物理模型
与图像模型进行比较
phy
rigi

我们会发现从中发现很大的不同 物理模型的网格为了减少计算提高性能
仅仅用一些粗略的网格去勾绘触发区域 但是 这也基本足够用 因为触发本身就是不精确的 且此种网格因为涉及了很多计算本身就是极为耗费性能的。

在这套物理系统中 我们可以轻松方便的设计触发 ,碰撞
当你新建了一个预设的cube或者其他物体且使用他们的collider的话可以用下面一段代码轻松地检测碰撞以及触发

void OnTriggerEnter(Collider collider)
    {
        print(collider.gameObject.name + ":" + Time.time);

    }

当然你也可能发现 我们在选择图形模型的时候出现了很多预制体,实际上这里出现的预制体也就都是手的不同的图形模型 我们可以根据左右手分别选择左右手的图形模型 其中包括了机器,仿真,纯白,为了达到更高的调试效果 我们推荐使用白色基础模型 因为他的渲染需求小很多 能够更清晰的反馈问题
window

此外工具模式可用性极低 在我的测试中即使工具异常明显 识别率成功率几乎是不可用的 因此我们在程序中几乎不需要考虑工具模式。

(2).SCENCE

在scence文件夹中 存在着很多leap用作演示的工程 他们统一基于core asset中的公用资源编写 所以所有文件都是可见的 都是可重用的 他们为我们的开发带来了很多思路 以及方法
比如我们以其中的imagine hand 就可以清晰的看出 leapmotion的工作进程以及识别算法的思路
:在正常的识别模式之下 采用了高噪点的模式同时蓝色边沿就是景深图像经过算法处理后 形成单帧的手势运算图形

imagine


我们如果直接采集图像和图形化检视面板作比较的话 就不难发现 这种描边+景深处理的形式


这里写图片描述


在这写预置的场景中甚至有一些解决了我们无从下手的设计问题

这里写图片描述
这里写图片描述

在这些设计工作上我们可以根据这些例子 这些demo直接去设计从而省去了很多的探索过程

鉴于下一章直接要讲一些功能的实现方式 我们在此直接贴出一些unity中物体操作的代码供大家调试

using UnityEngine;
using System.Collections;

public class mover : MonoBehaviour {

    // Use this for initialization
    void Start () {

        //x轴坐标 
        //float xPostion = -5f;
        //z轴坐标 
        //float zPostion = 10f;
        //直接将当前物体移动到x轴为xPostion,y轴为0,z轴为zPostion的三维空间位置。
        transform.position = new Vector3(0.1f,0.1f,0.1f);//初始化坐标

    }

    // Update is called once per frame
    /*
void Update () {
        /*
        //移动速度 
        float TranslateSpeed = 0.1f;

        //Vector3.forward 表示“向前”
        transform.Translate(Vector3.forward *TranslateSpeed);
         //单方向移动*/ 






        /*
        //轴移动速度移动速度 
        float xSpeed = 0.01f;

        //z轴移动速度移动速度 
        float  zSpeed = 0.01f;
        float ySp
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值