好的,欢迎大家来看这个系列的第二部分的内容,这一次呢,我们就直接进入主题,开发切水果游戏本身。

这次的切水果的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上的开发——开始界面相关推荐

  1. XboxOne的kinect在Unity上的开发——安装与调试

    这次我来说一下Xbox上游戏的开发,介绍一下Kinect在Unity上的使用. 首先,我们看一下Kinect.它是一种3D体感摄影机,同时它导入了即时动态捕捉.影像辨识.麦克风输入.语音辨识.社群互动 ...

  2. 关于微信开发工具界面不一样

    在初学时,我找好了网课,跟着官网上的操作下载了最新的开发工具,打开之后发现怎么与网课上的开发工具界面不同,这是怎么回事? 这只是因为开发工具的版本不一样,打开自己下载的开发工具,在界面的左上角就是开发 ...

  3. 如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小

    如何在Unity上开发Nintendo(任天堂)Switch平台游戏时让游戏patch包大小尽量小 众所周知,Nintendo Switch有一条guidline-0123来限制游戏的patch包大小 ...

  4. Unity手游开发札记——我们是如何使用Lua来开发大型游戏的?(上)

    0. 照旧的碎碎念 转眼间已经三月了,2月份的博客因为过年的懒惰和开年之后的忙碌而没有写--第二个月就打破了去年总结时对于2018年的愿望,真是羞耻呢-- 年后在准备新的测试版本,断断续续做了一些优化 ...

  5. kinect for Unity开发

    相关网盘免费资源下载... 1. http://www.cnblogs.com/Zackzhang/p/6203379.html Unity使用Kinect初级教程 2.http://blog.csd ...

  6. Kinect for Unity检测身高方法

    前: Kinect for Unity自身好像并没有附带检测身高的API可以直接使用. 但Kinect可以获得24个骨骼点,这足够让我们自行根据距离写计算出身高代码.当然也有别的方法.例如地面距离和头 ...

  7. 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 ...

  8. 《Unity 游戏案例开发大全》一6.5 游戏主场景

    本节书摘来异步社区<Unity 游戏案例开发大全>一书中的第6章,第6.1节,作者: 吴亚峰 , 杜化美 , 于复兴 责编: 张涛,更多章节内容可以访问云栖社区"异步社区&quo ...

  9. 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例

    本节书摘来异步社区<Unity 4 3D开发实战详解>一书中的第6章,第6.7节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区" ...

最新文章

  1. GeneratorSqlMapCustom(mybatis逆向工程)
  2. Agile Manifesto and principle
  3. 【Linux】用户组、用户操作
  4. 【Socket网络编程】1.bind()和 INADDR_ANY 解析
  5. html表格的表头怎么合并单元格,使用tableGrob合并表头单元格
  6. Linux下I/O多路转接之select --fd_set
  7. mysql5717开发设置怎么调回来_华为手机这几个默认设置,一定要关闭,再也不卡顿...
  8. mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
  9. 1499元被标149元,苹果官网产品出现Bug价后续:白高兴了!
  10. SAP 服务器文件上传和下载
  11. 编辑器、编译器和IDE的区别
  12. JSP的九大内置对象
  13. 如何调用Sphinx
  14. 【※taskmgr.exe进程知识详解※电脑知识】
  15. 后退N帧协议中发送窗口的尺寸大小
  16. 图计算的黄金时代 知识图谱背后的数据价值
  17. contos7 配置 python3环境 支持微信公众号开发
  18. 非微信官方网页解决方法
  19. http 各版本问题和优化
  20. GAME(A)性能测试过程模型

热门文章

  1. 如何将ascii值转字符
  2. Life is hard!
  3. 领取失业保险金人员参加职工医保个人不缴费
  4. js实现图片粘贴功能
  5. DataFrame交换两列
  6. Win10工具推荐:自带的剪切板
  7. java学习体会论文_关于学习java的心得体会
  8. Bluetooth MESH探究 --- (8) 怎么实现MESH网络?
  9. 算法学习之算法的引入
  10. VSO Downloader 【您连接到互联网的网络适配器没有启动自动检测 】解决办法