今天带来一个在自学Unity3D过程中写的第一个2D打飞机小游戏。代码写得不好,功能也很少,主要是为了记录学习心得,也希望各位能够多给些指导。后续应该会有优化和完善游戏功能。

闲话不多说,先来分析下游戏:

几乎没有什么功能,没有UI。主要有玩家方向键控制飞机移动,空格键射击,敌人被击中后销毁。

1.创建工作层

为了使游戏对象在场景中的层次不会错乱,可以创建不同的工作层来管理游戏对象,从而使2D游戏场景的层次更加分明,游戏对象之间的操作也更加方便。

依次选择菜单栏中的Edit -> Project Settings -> Tags and Layers (或者直接单机编辑器右上方的Layers -> Edit Layers),在Inspector视图中,单击Sorting Layers,添加如图两个Layer

顺便简单说下layer和sorting layer的区别:

layer主要通过光线投射来选择性地忽略碰撞器,或者添加碰撞功能。而sorting layer就是一个渲染层级的顺序的控制。决定Unity渲染关系的层级顺序是 :Camera ,soting layer sorting order。

2.创建背景

Assets文件夹中,导入Sprite文件夹,里面是我们需要用到的图片资源

直接将背景图片拖拽到Scene中,该图片自动成为一个精灵,改名为sky。将其sorting layer设置为background, order设置为0。为了实现背景循环滚动的效果,我们添加再添加两张背景图,上下叠放。

因为背景图片每单位100像素,MaxSize2048,所以每张图片高度应该是20.48

三张背景图的y坐标分别是20.48,0,-20.48,这样就可以将背景图无缝叠在一起。创建一个空对象,将三张背景图作为它的子物体,命名为Background。

接下来编写脚本使背景循环滚动来模拟飞机在场景中不断前进的效果。为Background对象添加该脚本组件。

using System.Collections;public class BGControl : MonoBehaviour {//背景滚动速度public float speed = 1.5f;void Update () {transform.Translate(Vector3.down * Time.deltaTime * speed);if (transform.position.y <= -20.48f) {transform.position += new Vector3(0, 20.48f*2, 0);}}
}

3.创建玩家飞机

将玩家飞机拖拽到场景视图中。将其sorting layer设置为froeground,order设置为1。

为其编写控制脚本

using UnityEngine;
using System.Collections;public class PlayerControl : MonoBehaviour {//玩家移动速度public float speed=5f;//子弹发射点public GameObject shotPoint;//子弹prefabpublic GameObject bullet;//玩家发射子弹CDprivate float shotCD = 0;public float CD = 0.2f;//声音资源private AudioSource audio;// Use this for initializationvoid Start () {audio = GetComponent<AudioSource>();}// Update is called once per framevoid Update () {//----------------玩家移动----------------//向上移动if (Input.GetKey(KeyCode.UpArrow) && transform.position.y<=0f) {transform.Translate(Vector3.up * Time.deltaTime * speed);}//向下移动if (Input.GetKey(KeyCode.DownArrow) && transform.position.y>=-8f){transform.Translate(Vector3.down * Time.deltaTime * speed);}//向左移动if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x>=-7f){transform.Translate(Vector3.left * Time.deltaTime * speed);}//向右移动if (Input.GetKey(KeyCode.RightArrow) && transform.position.x<=7f){transform.Translate(Vector3.right * Time.deltaTime * speed);}//发射炮弹if (Input.GetKey(KeyCode.Space)) {shotCD -= Time.deltaTime;shot();}}void shot() {//CD结束发送炮弹if (shotCD <= 0) {Instantiate(bullet, shotPoint.transform.position, Quaternion.Euler(new Vector3(0, 0, 0)));audio.Play();//重置CDshotCD = CD;}}}

为子弹添加box collider2d 和rigibody 2d组件。在rigibody 2d里,将Gravity scale值设置为0,以免子弹受中立影响,为子弹添加脚本并保存为prefab。

using UnityEngine;
using System.Collections;public class Shell : MonoBehaviour {// private AudioSource audio;//子弹速度public float speed=10f;//爆炸特效public GameObject effect;// Use this for initializationvoid Start () {//audio = gameObject.GetComponent<AudioSource>();}// Update is called once per framevoid Update () {//炮弹移动transform.Translate(Vector3.up * speed * Time.deltaTime);//销毁炮弹if (transform.position.y >= 11f) {Destroy(gameObject);} }void OnCollisionEnter2D(Collision2D obj) {
<span style="white-space:pre"> </span>
<span style="white-space:pre">  </span>//实例化粒子特效GameObject neweffect = Instantiate(effect, transform.position, transform.rotation) as GameObject;Destroy(obj.gameObject);Destroy(gameObject);Destroy(neweffect, 1.0f);}
}

在这里,当子弹击中敌人时,播放了粒子特效。需要注意的是,在特效的Particle System组件中,Renderer的sorting layer需要设置为foreground,order设置为1.否则特效会被掩盖。

4.敌人控制

创建5个prefab,层级关系和玩家的一样。

简单的脚本来随机生成一种敌机,挂载在Main Camera上

using UnityEngine;
using System.Collections;public class GameControl : MonoBehaviour {public GameObject[] enemy;// Use this for initializationvoid Start () {Invoke("CreateEnemy", 1.0f);}// Update is called once per framevoid Update () {}//生成敌人void CreateEnemy() {int enemyType = Random.Range(0, enemy.Length);Vector3 enemyPos=new Vector3(Random.Range(-7f,7f),11f,0);Instantiate(enemy[enemyType], enemyPos, Quaternion.Euler(new Vector3(0, 0, 0)));Invoke("CreateEnemy", 1.0f);}
}

脚本控制让敌人往下移动。

using UnityEngine;
using System.Collections;public class EnemyControl : MonoBehaviour {//敌人速度public float speed = 6f;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {//敌人移动transform.Translate(Vector3.down * speed * Time.deltaTime);if (transform.position.y <= -11) {Destroy(gameObject);}}
}

一个功能简单的lowbee 2D打飞机游戏就完成了!

[Unity]2D打飞机游戏相关推荐

  1. 2D竖版飞机游戏素材

    2D竖版飞机游戏素材 链接:https://pan.baidu.com/s/1Nuzy9vd9J1ml_P3fu_VHyw 提取码:69k8

  2. Unity—2D跑酷类游戏(一)

    实现思路 2D跑酷类游戏是模拟3D场景的效果的一个过程,主要就是怎么样通过一些2D图片来呈现3D游戏的效果.在这里我主要总结了三点. 在3D场景中随着障碍物的移动,其相应的坐标和大小也会发生变化. 让 ...

  3. [Unity]2D横版游戏像素化

    根据参考资料1,可以把2D高清的图片 像素化,成像素游戏 工程下载地址参考资料2 参考资料: 1.[游戏开发]在 Unity 中打造纯像素画面的2D像素游戏 2.PixelCamera2D 3.

  4. 《Unity 2D与3D手机游戏开发实战》简介

    #好书推荐##好书奇遇季#<Unity 2D与3D手机游戏开发实战>,京东当当天猫都有发售.彩色印制,定价89元,网店打折销售更便宜.本书配套源码.PPT课件,适合Unity游戏开发初学者 ...

  5. unity中2D飞机游戏手指触屏操作的问题

    unity中2D飞机游戏手指触屏操作的问题 菜鸡记录一下在项目中遇到的坑 下面就是我用的代码 if (UnityEngine.Input.touchCount > 0) //每一帧触摸到的屏幕的 ...

  6. Unity制作2D动作平台游戏视频教程

    Metroidvania工具包:打造统一的2D行动平台 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确 ...

  7. Unity 2D游戏开发教程之摄像头追踪功能

    Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...

  8. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  9. Unity 2D游戏开发教程之为游戏场景添加多个地面

    Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...

最新文章

  1. linux获取近一小时日志,Linux分析日志获取最多访问的前10个IP
  2. 浙江省计算机二级(C语言)通过经验+资料
  3. X264码率控制流程分析 (转)
  4. AWS re:Invent 2018的5大公告
  5. 当页面上的某个控件回发时,保持滚动条位置的。
  6. Tensorflow学习笔记(一)
  7. SQL2008数据库的备份与还原
  8. 手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
  9. php留言板的实验步骤,php留言板实训报告.docx
  10. 版权:大众保险被判向微软赔偿217万元
  11. STM32——MPU6050六轴传感器
  12. Linux磁盘阵列(RAID0、RAID1、RADI5、 RAID6、RAID1+0)
  13. C++关键字(static/register/atuo/extern/volatile/const/inline/define/typedef)
  14. 发现同义词 python_同义词查找算法
  15. 纯css实现二级下拉菜单
  16. python人民币和美元转换-Python实现制度转换(货币,温度,长度)
  17. jar(jar -cvf)包压缩包含绝对路径问题
  18. Tanking个人短网址在线生成源码 个性化设置
  19. 手游辅助制作原理和学习思路
  20. Promise请求并发

热门文章

  1. mb63.net/ios.html,Document
  2. 高博视觉SLAM十四讲思维导图分享
  3. 新基建必看系列——一文看懂爆火的智慧灯杆未来趋势及竞争格局
  4. 杂七杂八(5): 文件图标变白纸 解决方法(在Windows 10中修复损坏或丢失的图标和缩略图)
  5. java怎么写桌面日历_Win7桌面怎么添加日历记事本
  6. ASP.NET 权限管理 页面静态化 OA系统培训 三层架构
  7. Revit命令名称与命令ID
  8. 关于爬虫304的解决
  9. map computeIfAbsent 的浅尝辄止
  10. 使用threejs导入外部模型与滑动查看【微信小程序】-裁-