【项目】-老年慢性疾病预防与辅助治疗的严肃体感游戏

项目简介

  • 我们的项目名称叫做“老年慢性疾病预防与辅助治疗的严肃体感游戏”,这是一款做给中老年人的体感游戏 ,主要是为了预防和辅助老年痴呆症的治疗。游戏引擎用的是unity3D,体感传感器用的是leapmotion,这是一款手部传感器,能精确地识别手掌上的每一个关节点。整个游戏的大背景设计为一个老人的一天,按时间线安排游戏场景,然后插入一些小游戏,养生知识的科普和判断式的情景选择。让玩家在不知不觉中进行大量的手部运动。

团队如何分工

  • 我们团队一共四个人,我是组长,负责pc端的代码编写,游戏场景搭建,以及整体工作的统筹。其余三人一人负责游戏建模和音效,一人负责安卓端的代码编写工作,一人负责调研,文案等工作。

遇到的难题

  • 传感器与游戏引擎的连接
    • 环境一直搭不好,用这款传感器做游戏的人并不是很多,所以网上能找到的博客和参考资料很少,再加上传感器驱动,SDK,游戏引擎等有众多版本,试错了很久才实现连接。
    • 解决办法:学习了很多大牛的博客,查看了官方文档,并在官网上下载demo,模仿demo里面的源码才尝试成功。
  • 手势识别
    • 真正上手之后,手势识别是最难的,需要从3D模型中找到每个关节的位置,速度等等,关键原因是对API不熟悉。比如说判断向前挥手,那就是手掌在z方向的速度,比设定的阈值速度大,但是x,y方向上的速度比阈值速度小。
  • 传感器停产
    • 原本选用的一款传感器在我们开发途中停产,如果继续使用将会导致后期成果转换面临挑战,因此只能重头来,对比了市场上的其他传感器,重新选取了更合适的一款传感器,重新设计游戏。

LeapMotion

  • 简单介绍:传感器大概有两个手指头这么大,通过usb连接电脑,一般会放置在键盘上,手悬在传感器上方,也就是屏幕正前方就可以。
  • 成像原理:传感器内置两个摄像头,从不同角度捕捉画面,重建出手掌在真实世界三维空间的运动信息,检测的空间是一个倒着的四棱锥体。
  • 传感器能捕捉到的三种运动信息:手指,手掌,和手掌球的运动信息(模拟手的弧面的一个球体)
  • 获取传感器信息进行开发:在使用过程中,传感器会定期传送每一帧的信息,这里的帧(frame)是leapmotion数据模型的基类。传感器会给手掌和手指分配唯一的id,根据id,通过Frame::hand( ) , Frame::finger( )等函数就可以获取手掌和手指的信息了。根据每一帧和前一帧检测到的数据就可以检测到运动信息。

我做的具体技术工作

  • 完成传感器与游戏引擎的连接
  • 具体硬件的底层实现原理并不是很了解,但是我知道实现连接要进行以下两个步骤
    • 1.传感器和电脑的连接
      • 下载传感器SDK和驱动程序,数据线连接电脑,绿色表示连接成功
      • 补充知识:SDK与API的区别
        • SDK相当于一个有很多功能的程序包,API是它提供的接口
        • 例子:一瓶饮料是SDK,饮料上的吸管是API
        • 一句话:这个SDK里面好多API啊
    • 2.传感器和游戏引擎的连接
      • 导入leap_Motion资源包,Leap Motion Unity Core Assets。这个里面的核心资源是Hand Controller,这是允许unity和leapmotion交互的预制体(预制体上绑定了一个脚本),他会作为锚点将手渲染到场景中,用户通过脚本和传感器交互。
  • “酷跑”游戏开发
    • 游戏简介
      • 游戏与传统的酷跑游戏类似,只是把键盘“上左右”对游戏人物的控制换成了向“上左右”挥手代替。向左右挥手可以控制游戏人物向左右移动以避开障碍物,向上挥手可以控制游戏人物向上跳跃以避开障碍物。此外,碰到障碍物会导致游戏结束,碰到奖励将增加闯关时间。
    • 在酷跑游戏中如何让玩家感受到场景在无穷无尽的加载?
      • 实际上只准备了三条跑道,当玩家运动到第二条跑道时,将第一条跑道移动到第三条跑道衔接处。所有的跑道上随机出现障碍物。因此玩家可以感受到每次都在不同的新的跑道上前进,实际上是三条跑道一步一步向前走。
    • 挥手
      • 向左挥手具体指的是手向左的速度大于某一个阈值
      • hand.PalmVelocity.x < -deltaVelocity && !isStationary(hand);
         
  • “推砖块”游戏开发
    • 游戏简介
      • 通过手掌的朝向控制发射窗口的移动,向前挥手抛出小球咋向对面的砖墙,有的砖块砸一次便会消失,有的砖块需要被咋多次才会消失。当所有的砖块全部消除时游戏结束。
    • 涉及到的手势判断
      • 获取手掌朝向,根据手掌朝向控制窗口移动
      • 具体方法是通过三维空间的方向向量来实现的,获取当前手掌球的方向向量,以及当前摄像机的方向向量
      •  target01 = hand.PalmPosition.ToVector3() + hand.PalmNormal.ToVector3() * (transform.localScale.y * .5f + .02f);
        float x = target01.x;
        float y = target01.y;
        transform.position = Vector3.MoveTowards(transform.position, new Vector3(x,y, z), 0.5f * speed * Time.deltaTime);
  • “拍星星”游戏开发
    • 游戏简介
      • 游戏窗口中陆续有星星从随机位置掉落,玩家需要移动双手准确判断星星的位置,拍手时可消除星星
    • 涉及到的手势判断
      • 拍手:获取两个掌心的位置,当位置小于阈值时,识别为拍手
      •  if (leftPosition != Vector.Zero && rightPosition != Vector.Zero)
         {
        
             Vector3 leftPos = new Vector3(leftPosition.x, leftPosition.y, leftPosition.z);
             Vector3 rightPos = new Vector3(rightPosition.x, rightPosition.y, rightPosition.z);
             distance = 10 * Vector3.Distance(leftPos, rightPos);
                 
        }

猜你喜欢

转载自blog.csdn.net/qq_39328436/article/details/114229707
今日推荐