热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小游戏<别让箱子掉下来>

一些无关紧要的话:最近心血来潮,想研究下LayaBox,因为我感觉H5是将来的趋势.而Unity对网页的支持始终不那么理想.于是我变身小白从头开始,网上各种查资料,下载安装包,搭建

一些无关紧要的话:

最近心血来潮,想研究下LayaBox,因为我感觉H5是将来的趋势.而Unity对网页的支持始终不那么理想.

于是我变身小白从头开始,网上各种查资料,下载安装包,搭建环境,很顺利的就让LayaBox的案例小游戏运行起来了.

是的,就是我下面要讲的这个游戏<别让箱子掉下来>;研究了几天LayaBox,发现它很多地方其实和Unity有类似的地方,然后我突然发现

这个小游戏有点意思,决定用Unity实现一次,于是就有了这篇文章

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

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

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

上面的都是废话,入正题,先看游戏效果=====>

大致分析下这个游戏==>主要功能可以分为3个模块

1.箱子下落; 2.发射子弹; 3.碰撞检测; 至于其他比如击中显示粒子,不必在意,我也是胡乱做的,没有美感

好,先上代码

//箱子代码


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Box : MonoBehaviour
{private GamePlay gp;//粒子private ParticleSystem ps;// Start is called before the first frame updatevoid Start(){gp = GameObject.Find("Canvas").GetComponent();ps = transform.GetChild(0).GetComponent();ps.gameObject.SetActive(false);}private void OnCollisionEnter2D(Collision2D collision){//检测到是底部if (collision.gameObject.name == "DownCheck"){OnDownCheck();}//检测到是子弹else if (collision.gameObject.name == "bullet"){Destroy(collision.gameObject);OnHitBullet();}}void OnDownCheck(){Destroy(gameObject);gp.UpdateMiss();}void OnHitBullet(){Rigidbody2D r2d = transform.GetComponent();int r = Random.Range(0, 5);//给box一个向上的力if (r <2)//五分之二的几率箱子向上弹{r2d.AddForce(Vector2.up * 500);}else//击碎箱子{r2d.gravityScale = 0;ps.transform.SetParent(transform.parent);ps.gameObject.SetActive(true);ps.Play();transform.GetComponent().color = new Color(1, 1, 1, 0);gp.UpdateScore();Destroy(gameObject, 1.25f);}}
}

子弹代码


using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Bullet : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//添加一个2d刚体Rigidbody2D rig = gameObject.AddComponent();//去掉重力rig.gravityScale = 0;//添加一个向上的力*系数rig.AddForce(Vector2.up * 500);}private void Update(){//子弹超出屏幕自动销毁if (transform.localPosition.y > Screen.height + 200){Destroy(this.gameObject);}}}

主逻辑


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class GamePlay : MonoBehaviour
{//文本显示public Text Txt_score, Txt_miss, Txt_begin;//预制体public Box box;public Bullet bullet;//节点由于存放生成的子弹和箱子public Transform bulletRoot, boxRoot;//箱子下落时差标志float _boxCreateFps = 0;//得分,错过记录int _scroe, _miss;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//鼠标左键发射if (Input.GetMouseButtonDown(0)){Txt_begin.text = "";Vector3 pos = Input.mousePosition;pos = Camera.main.ScreenToWorldPoint(pos);CreateBullet(pos);}//每隔1.25秒生成一个箱子_boxCreateFps += Time.deltaTime;if (_boxCreateFps >= 1.25f){_boxCreateFps = 0;//随机箱子的x坐标float rand_x = Random.Range((Screen.width / -2) + 250, (Screen.width / 2) - 250);Vector3 pos = new Vector3(rand_x, Screen.height + 110, 0);CreateBox(pos);}}//创建子弹void CreateBullet(Vector3 pos){GameObject go = Instantiate(bullet.gameObject) as GameObject;go.transform.SetParent(bulletRoot);go.transform.position = pos;go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, 0);go.transform.localScale = Vector3.one;go.name = "bullet";}//创建箱子void CreateBox(Vector3 pos){GameObject go = Instantiate(box.gameObject) as GameObject;go.transform.SetParent(boxRoot);go.transform.localPosition = pos;go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, 0);float r = Random.Range(1, 2.5f);go.transform.localScale = new Vector3(r, r, 1);}//更新得分public void UpdateScore(){_scroe += 1;Txt_score.text = "击中:" + _scroe;}//更新错过public void UpdateMiss(){_miss += 1;Txt_miss.text = "错过:" + _miss;}}



//场景和资源

 

项目包链接:

链接: https://pan.baidu.com/s/1eWIiV_ShgdMl30FwQnLIvA 提取码: 5efq

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

需要注意:

box之间不需要碰撞,需要在设置里边剔除,不懂的可以自行百度


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有