Unity + Kinect简单应用制作水波效果

各位伙伴,这篇博客是我认认真真想分享自己一些学习以及一点点的代码实现经验,当然,既然这么认真的开始,我就会坚持进行经验分享,希望大家能够一起学习一起进步一起发财叭,自大学起就一直关注****,其中发过文章是因为交作业必须,但是也一直没能保存下来,嗯~那就从今儿起吧

注: 上来的代码一定是本人已经通过项目功能,但是不确保是否最简化,若有更好的优化方式,还请各位大佬不吝赐教

一、 实现简单水波效果

1,安装Kinect,准备unity,具体安装、驱动方式:
参: https://blog.****.net/hhu1506010220/article/details/53223732
2,前提工作准备妥当之后,测试Kinect是否可以检测识别

Unity + Kinect简单应用制作水波效果
打开KinectStudioV2.0
Unity + Kinect简单应用制作水波效果
连接成功的状态:
Unity + Kinect简单应用制作水波效果
3,打开unity,导入Kinect unitypackage文件(适用于unity的Kinect包,unity可直接作用于Kinect)
官方下载包
4,功能实现
(检测人物离地面的高度,判断是否产生水波)
(Kinect2可以同时追踪到六个人,一下代码只写了一人,六人同理)
(若想只追踪到最近的一个人,换个接口方法即可)
void Update () {
if(manager && manager.IsInitialized())
{
//获取目标关节点的索引
int jointIndex1 = (int)KinectInterop.JointType.FootLeft;
int jointIndex2 = (int)KinectInterop.JointType.FootRight;
if(manager.IsUserDetected())
{
List indexList = manager.GetTrackedBodyIndices();
if(indexList.Count==1)
{
hero1.SetActive(true);
Debug.Log(avatar0.playerIndex);
long userId = manager.GetUserIdByIndex(avatar0.playerIndex);
if (manager.IsJointTracked(userId,jointIndex1)|| manager.IsJointTracked(userId, jointIndex2))
{
float fFootPosY1 = manager.GetJointPosition(userId, (int)KinectInterop.JointType.FootLeft).y;
float fFootPosY2 = manager.GetJointPosition(userId, (int)KinectInterop.JointType.FootRight).y;
if(fFootPosY1<=1|| fFootPosY2<=1)
{
animator1.SetBool(“ShuiBo”, true);
}
}
else
{
animator1.SetBool(“ShuiBo”, false);
hero1.SetActive(false);
}
}
}

                                                         如有错误期待指正