本文章由cartzhang编写,转载请注明出处。 所有权利保留。

文章链接: http://blog.csdn.net/cartzhang/article/details/44748475

作者:cartzhang

说明:kinect使用的是一代版本,SDK为1.8版本

一、概述

根据上篇博客,可大致知道Kinect舒适区范围。下面就借助Ue4平台来表现一下。

建立工程,加载Kinect库。当然,我并没有直接使用Kinect库,而是自己封装了一个自己的库。

使用方法与添加UE4的各种库类似,具体可以UE4的wiki上自行搜索,当然自己也有尚未解决的问题。

二、BP代码部分

在我的Character的头文件上加入调用Kinect玩家位置的函数

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gameplay)
bool BGetPostionSucess;
UFUNCTION(BlueprintCallable, Category = KINECTUE)
FVector4 GetPlayerPositon();

CPP中代码如下:

FVector4 AU4UE4TestCharacter::GetPlayerPositon()
{
FVector4 VPosition = FVector::ZeroVector;
BGetPostionSucess = false;
UDKinect::UDKVector pPosition;
int iFlag = KinectGetUserPosition(USER_INDEX, pPosition);
if (iFlag == 0)
{
BGetPostionSucess = false;
//GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "can get player position for the moment");
}
else{
VPosition = FVector(pPosition.x, pPosition.y, pPosition.z);
BGetPostionSucess = true;
}
return VPosition;
}

这样就基本搞定了代码部分。

三、Blueprint的函数实现

首先是初始化舒服区的位置,在BP中写一个函数即可。

根据之前博客范围,我想把左右范围控制在角度为60度,这样做有就跟为90-60= 30度,这样根据正切函数就可以得到舒适距离与左右范围的为dist/tan60;因此在下图中有个变量叫做根号三,就是约等于1.732。

我本有意画个图,奈何画的比较烂,不贴了。

初始化图:

说明:MinZ为舒适区的最近距离,MaxZ为舒适区设置的最大距离。这个根据Kinect摄像头的高度和角度来调节。

接下来就是画线了:画了红绿两种线段来表示区域。

红色交汇处为左上角点,绿色交汇点为右下角点。

Basic position是kinect的位置,也可以叫做相对位置点。

然后就是玩家位置了,BP如下:

四、主BP调用

这些函数搞定以后,就是在关卡的BP中进行调用了。这个就简单多了。

初始化调用:

位置实时判断表示:

五、测试结果

若都写完了,编译也没有错误,就Play来运行检测一下。

看你的Kinect是否可以找到玩家位置,我这里用来一个小木块来代替了玩家,做了个小gif.

THE  END!

---------------------------

若有问题,请随时联系!

非常感谢!

最新文章

  1. Azure China (12) 域名备案问题
  2. TextField 的文字间距
  3. Fragment在xml中但作用不是显示view
  4. CodeForces484A——Bits(贪心算法)
  5. Oracle PO - 模块一揽子采购协议小结
  6. 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
  7. DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建
  8. oc学习之路----application.keyWindow.rootViewController与self.window.rootViewController与[self.window makeKeyAndVisible];小发现
  9. 超强、超详细Redis数据库入门教程(转载)
  10. 201521123049 《JAVA程序设计》 第13周学习总结
  11. Round #3
  12. mssql sqlserver获取指定月份当月天数总和
  13. 洛谷p1181 数列分段section I
  14. H5外包 微信小程序外包 小程序外包 就找北京动点开发团队
  15. visual studio 2013 几个测试工具(Nunit 3、xUnit)
  16. [Unity插件]DOTween基础
  17. 【转】使用Log4Net进行日志记录
  18. 使用断言NSAssert()调试程序错误
  19. C++中的Thunk技术 / 非静态类成员函数作为回调函数 的实现方法
  20. tornado-About Web

热门文章

  1. 基于Linux系统WINE虚拟机技术的研究
  2. geotools修改shapefile 属性名乱码问题
  3. php数组函数(分类基本数组函数,栈函数,队列)
  4. VC error link
  5. 怎么做好看的html5游戏界面
  6. jquery 获取上一个兄弟元素和下一个兄弟元素
  7. JS学习笔记 - fgm练习 2-11- 改变图片路径 var img = new Image(); 图片预加载
  8. PythonNET网络编程2
  9. spark源码解析之scala基本语法
  10. Android JAVA如何判断两天在同一周内