XboxOne的kinect在Unity上的开发——开始界面
好的,欢迎大家来看这个系列的第二部分的内容,这一次呢,我们就直接进入主题,开发切水果游戏本身。
这次的切水果的demo呢,我们选择使用ugui来制作,因为ugui相对于NGUI的各种优势,让我们选择了ugui,关于这些呢,大家可以参考我的另一篇帖子,关于NGUI与ugui的对比。
NGUI与ugui的对比
首先,我们需要搭建一个游戏的开始界面,,选择建立一个panel,。建立panel的同时,我们也会自动创建一个canvas,并且panel也会在他之下,我们把panel改名为indexpanel,方便辨识。在这个panel下面新建一个image图片,图片选择我们的背景图。然后我们再分别建立三个按钮,按钮的话我们使用一个空物体里面套入两个图片,一个水果一个圆环这样的设计。
以这样的方式我们建立好3个按钮,作为主界面的三个按钮。
但是按钮如果只是这样就显得有些单调了,所以我们可以让圆环的图片旋转起来。我这次使用的是Unity的动画控制器进行旋转,并没有选择使用ugui的dotween的插件。
首先,我们给圆环的图片添加新的动画组件,Animator组件 。我们再添加一个动画控制器,起名为Start_Circle_Contral ,我们把这个动画控制器拖到animator组件里,作为这个圆环的动画控制器。光有动画控制器还不够,所以我们还需要建立一个动画片段,没有动画片段,光有控制器一样是无法播放动画的。动画片段起名为Start_Circle_Rotation,,打开动画控制器编辑,我们把这个动画片段拖进去,作为默认的动画,并且,我们把右边的loop给勾选上,让他进行循环的播放。我们在打开动画的编辑器,选择进行添加,再选择rotation,也就是旋转。
右边我们选择曲线模式
时间0的时候我们把Z轴的旋转角度设为0,根据我的调整,选择10秒后的Z轴数值为360,也就是每10秒转一圈,这个速度的话,是比较理想的。我们也可以点击播放,看一下效果,按照自己的喜好调整。
这样,我们的界面也就基本完成了,但是,这只是一个界面,并没有与kinect相连和互动。此时我们建立一个rawimage作为kinect显示我们人体的图片,可以不进行图片拖入,直接选择白色就行。我们给它改名为KinectImg。然后我们给它添加一个canvas group脚本,这样我们就可以调节它的透明度了。
我们再添加一个image,作为我们的右手,这样就可以表示我们的右手所在的位置了。图片也可以按照自己的喜好来做。
最后,我们给indexpanel添加一个脚本,用来控制我们的这个场景。
首先在脚本里我们要获取一些变量
public Canvas canvas;//父级canvaspublic Image rightHand;//右手图片public Sprite[] handStateSprites;//图片数组public Image btn1;按钮public Image btn2;public Image btn3;public Image circle1;圈public Image circle2;public Image circle3;
获取这些变量以后,我们就可以开始内部逻辑的编写了。
第一步,我们首先要获取玩家,也就是要检测到玩家。我们在update中编写。
if (KinectManager.Instance.IsJointTracked(userId, jointType)){//关节点被追踪到Vector3 handPos = KinectManager.Instance.GetJointKinectPosition(userId, jointType);//获取左手信息Vector3 handScreenPosV3 = Camera.main.WorldToScreenPoint(handPos);//右手转换到屏幕坐标handScreenPosV3 = Utils.Rec(KinectInterop.JointType.HandRight);Vector2 handSenPos = new Vector2(handScreenPosV3.x, handScreenPosV3.y);Vector2 uguiPos;//执行屏幕坐标到UGUI左边的转换bool changeSucess = RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)canvas.transform, handSenPos, Camera.main, out uguiPos);if (changeSucess){//表示右手在canvas所表示的矩形范围内RectTransform rightRectTf = rightHand.transform as RectTransform;rightRectTf.anchoredPosition = uguiPos;//更新鼠标图标}
}
这样就是表示我们获取到玩家的骨骼关节点了。接下来我们就可以判断玩家的手型了,我们用握拳来表示点击。
bool isHandClose = false;rightHand.sprite = handStateSprites[0];KinectInterop.HandState rightHandState = KinectManager.Instance.GetRightHandState(userId);if (rightHandState == KinectInterop.HandState.Closed){//右手握拳了isHandClose = true;rightHand.sprite = handStateSprites[1];}
这样就是表示我们已经握拳了,也就是做出了点击的动作。但是我们需要点击的是按钮,所以要判断是否在按钮上,或者不在,我们以圆圈为按钮(因为圆圈范围相对水果较大)。
if (isHandClose==true){//握拳了,然后再看是否有跟三个按钮重合if (circle1.enabled==true&& RectTransformUtility.RectangleContainsScreenPoint(circle1.rectTransform, handSenPos, Camera.main))//检测到点在rect里面的时候才会返回true{//点击了第一个按钮hanClickFruit(btn1);}else if (circle2.enabled == true && RectTransformUtility.RectangleContainsScreenPoint(circle2.rectTransform, handSenPos, Camera.main))//检测到点在rect里面的时候才会返回true{//点击了第二个按钮hanClickFruit(btn2);}else if (circle3.enabled == true && RectTransformUtility.RectangleContainsScreenPoint(circle3.rectTransform, handSenPos, Camera.main))//检测到点在rect里面的时候才会返回true{//点击了第三个按钮hanClickFruit(btn3);}}
这样我们就可以知道切到了那个水果了,但是现实游戏中,当我们切中水果之后会有一个向上的飞行动作之后再下落,我们也要实现以下这个效果。所以我给每个水果的图标都添加了刚体,但是默认的刚体重力比例设为0,这样就不会掉落了。
/****切到水果的处理函数****/private void hanClickFruit(Image clickFruit){Rigidbody2D r1 = btn1.GetComponent<Rigidbody2D>();Rigidbody2D r2 = btn2.GetComponent<Rigidbody2D>();Rigidbody2D r3 = btn3.GetComponent<Rigidbody2D>();r1.gravityScale = gravityScale;r2.gravityScale = gravityScale;r3.gravityScale = gravityScale;circle1.enabled = false;circle2.enabled = false;circle3.enabled = false;curBtn = clickFruit;//记录当前是那个水果
}
获取了切中的水果,以及他们的刚体组件。接下来就可以赋予效果了。但是我们同样需要一些变量。
private Image curBtn;//记录被切中的水果,希望知道水果何时出界,出界时再切换
public int curBtnOutY = -300;//小于这个值为出界
public int upForce = 800;
public int gravityScale = 10;
我们可以赋予被切中的水果做向上运动之后掉落,其他的则直接掉落,掉落后出屏幕外时进行销毁。
if (clickFruit==btn1){r1.AddForce(new Vector2(0, upForce));}else if (clickFruit==btn2){r2.AddForce(new Vector2(0, upForce));}else{r3.AddForce(new Vector2(0, upForce));}
我们可以使用if和else if来判断,也可以用switch。
接下来就是判断出界了,超出屏幕时销毁,因为水果被赋予了刚体,所以重力会使水果向下掉落,我们只需要判断Y轴小于某个值就可以了。判断的话,需要我们放在update里进行每帧检测。
具体方法如下。
//执行检测什么时候水果出界private void deteCurBtn(){if (curBtn!=null){RectTransform rtf = curBtn.transform as RectTransform;//获取当前水果属性if (rtf.anchoredPosition.y<curBtnOutY){//被切中水果出界panelCenter.showGamePanel();Destroy(gameObject);}}}
以上就是这次的开始界面的开发,下一期我会介绍游戏界面的制作。
第一期:
http://blog.csdn.net/Iwilreal/article/details/78516838
XboxOne的kinect在Unity上的开发——开始界面相关推荐
- XboxOne的kinect在Unity上的开发——安装与调试
这次我来说一下Xbox上游戏的开发,介绍一下Kinect在Unity上的使用. 首先,我们看一下Kinect.它是一种3D体感摄影机,同时它导入了即时动态捕捉.影像辨识.麦克风输入.语音辨识.社群互动 ...
- 关于微信开发工具界面不一样
在初学时,我找好了网课,跟着官网上的操作下载了最新的开发工具,打开之后发现怎么与网课上的开发工具界面不同,这是怎么回事? 这只是因为开发工具的版本不一样,打开自己下载的开发工具,在界面的左上角就是开发 ...
- 如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小
如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小 众所周知,Nintendo Switch有一条guidline-0123来限制游戏的patch包大小 ...
- Unity手游开发札记——我们是如何使用Lua来开发大型游戏的?(上)
0. 照旧的碎碎念 转眼间已经三月了,2月份的博客因为过年的懒惰和开年之后的忙碌而没有写--第二个月就打破了去年总结时对于2018年的愿望,真是羞耻呢-- 年后在准备新的测试版本,断断续续做了一些优化 ...
- kinect for Unity开发
相关网盘免费资源下载... 1. http://www.cnblogs.com/Zackzhang/p/6203379.html Unity使用Kinect初级教程 2.http://blog.csd ...
- Kinect for Unity检测身高方法
前: Kinect for Unity自身好像并没有附带检测身高的API可以直接使用. 但Kinect可以获得24个骨骼点,这足够让我们自行根据距离写计算出身高代码.当然也有别的方法.例如地面距离和头 ...
- Unity安卓游戏开发:打造7款2D 3D游戏 Unity Android Game Development : Build 7 2D 3D Games
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确) |大小:15.4 GB |时长:32h 55m Un ...
- 《Unity 游戏案例开发大全》一6.5 游戏主场景
本节书摘来异步社区<Unity 游戏案例开发大全>一书中的第6章,第6.1节,作者: 吴亚峰 , 杜化美 , 于复兴 责编: 张涛,更多章节内容可以访问云栖社区"异步社区&quo ...
- 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例
本节书摘来异步社区<Unity 4 3D开发实战详解>一书中的第6章,第6.7节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区" ...
最新文章
- GeneratorSqlMapCustom(mybatis逆向工程)
- Agile Manifesto and principle
- 【Linux】用户组、用户操作
- 【Socket网络编程】1.bind()和 INADDR_ANY 解析
- html表格的表头怎么合并单元格,使用tableGrob合并表头单元格
- Linux下I/O多路转接之select --fd_set
- mysql5717开发设置怎么调回来_华为手机这几个默认设置,一定要关闭,再也不卡顿...
- mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
- 1499元被标149元,苹果官网产品出现Bug价后续:白高兴了!
- SAP 服务器文件上传和下载
- 编辑器、编译器和IDE的区别
- JSP的九大内置对象
- 如何调用Sphinx
- 【※taskmgr.exe进程知识详解※电脑知识】
- 后退N帧协议中发送窗口的尺寸大小
- 图计算的黄金时代 知识图谱背后的数据价值
- contos7 配置 python3环境 支持微信公众号开发
- 非微信官方网页解决方法
- http 各版本问题和优化
- GAME(A)性能测试过程模型