[Unity3D]Unity3D游戏开发之《经典打砖块》游戏项目讲解
2014-04-29 16:40
423 查看
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。
今天呢,我们来一起做一个怀旧版的经典游戏打砖块。相信每一个和博主同龄的人对于这个游戏都有着一种独特的情感吧。这个游戏是博主小时候掌上游戏机里面比较好玩的一个游戏,玩家需要通过控制屏幕下方的横条,通过一个小方块来消灭屏幕上方的砖块,玩家每消灭一个砖块,就能够得到一定的分数,当消灭完整个屏幕上的方块后,即可进入下一关,而且屏幕下方的横条长度会增长。那么,关于这个游戏就暂且介绍到这里,我们下面开始今天的内容。
一、游戏界面
首先我们创建如下的游戏场景,这个游戏场景中我们使用一个Plane作为我们的游戏背景,我们将Plane的Rotation属性设置为90,180,0,使其与主摄像机垂直,我们将Plane命名为Background。接下来我们将主摄像机的投影方式改为正交投影,然后调整摄像机的视野范围,使我们的Background能够完全显示在游戏窗口中。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/29/9ae13891a4442451de117c52c8fe11ac)
接下来,我们创建一个Cube并调整其大小,它将作为我们的游戏体,玩家需要控制它来接住小球。我们将它命名为PlayBoard。同样地,我们创建一个小球,将其命名为PlayBall。我们需要将PlayBoard和PlayBall的z坐标设置为相同的值,即保证它们是在一个平面上。为了让小球具备弹性,我们可以导入官方提供的物理材质资源包,这里我们选择Bouncy材质。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/29/dbbb268e8841a6c186622ed81327e82b)
好了,到目前为止,我们的界面就已经完成了。下面我们来一起编写脚本实现脚本控制吧!
二、脚本控制
我们首先需要产生一组砖块。这里我们采用动态生成的方法,即先***砖块的预设,然后根据预设克隆出新的砖块。预设在Unity3D中就是可复用的游戏体,使用预设可以减少内存资源的消耗。代码如下:
接下来,我们为白色横条编写脚本,在这段脚本中,横条只能在游戏界面内水平移动。代码如下:
既然已经实现了对于横条的控制,那么我们接下来来实现小球的脚本,小球在游戏开始时会受到一个45度方向的力,这样小球就有了一个初速度,小球的反弹通过Unity的物理引擎来实现。当小球碰到砖块时,砖块将被销毁,玩家得到1分。当小球的位置低于横条的位置时,游戏结束。代码如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/29/78b14b04e20e19f05e2c063a50917089)
运行游戏的过程中,我们会发现一个问题就是当小球移动到游戏界面的边缘时会消失。理论上在这个位置小球应该会反弹回来,怎么办呢?我们继续回到游戏界面,在界面的顶部、左侧、右侧分别创建一个和PlayBall、PlayBoard共面的Cube。我们同样为这个Cube设置一个弹性材质.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/29/b4450812a6fae37a060bc141bf70383a)
到目前为止,这个游戏的核心部分已经全部讲解完毕。最后,我们做一个简单的游戏管理器GameManager来实现对玩家得分和游戏状态的更新:
每日箴言:不管是出于意愿还是无知,我们的成功和失败都不是别人招致的,而是自己决定的。——加思·斯坦
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/29/4bfc59529a71d8abd2f4a78920b4d22d)
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培,本文出处:/article/1479874.html
今天呢,我们来一起做一个怀旧版的经典游戏打砖块。相信每一个和博主同龄的人对于这个游戏都有着一种独特的情感吧。这个游戏是博主小时候掌上游戏机里面比较好玩的一个游戏,玩家需要通过控制屏幕下方的横条,通过一个小方块来消灭屏幕上方的砖块,玩家每消灭一个砖块,就能够得到一定的分数,当消灭完整个屏幕上的方块后,即可进入下一关,而且屏幕下方的横条长度会增长。那么,关于这个游戏就暂且介绍到这里,我们下面开始今天的内容。
一、游戏界面
首先我们创建如下的游戏场景,这个游戏场景中我们使用一个Plane作为我们的游戏背景,我们将Plane的Rotation属性设置为90,180,0,使其与主摄像机垂直,我们将Plane命名为Background。接下来我们将主摄像机的投影方式改为正交投影,然后调整摄像机的视野范围,使我们的Background能够完全显示在游戏窗口中。
接下来,我们创建一个Cube并调整其大小,它将作为我们的游戏体,玩家需要控制它来接住小球。我们将它命名为PlayBoard。同样地,我们创建一个小球,将其命名为PlayBall。我们需要将PlayBoard和PlayBall的z坐标设置为相同的值,即保证它们是在一个平面上。为了让小球具备弹性,我们可以导入官方提供的物理材质资源包,这里我们选择Bouncy材质。
好了,到目前为止,我们的界面就已经完成了。下面我们来一起编写脚本实现脚本控制吧!
二、脚本控制
我们首先需要产生一组砖块。这里我们采用动态生成的方法,即先***砖块的预设,然后根据预设克隆出新的砖块。预设在Unity3D中就是可复用的游戏体,使用预设可以减少内存资源的消耗。代码如下:
using UnityEngine; using System.Collections; public class CubeManager : MonoBehaviour { //定义第一个砖块的位置 private float StartX=-6.20F; private float StartY=4.625F; //定义砖块单元 public GameObject[] Units; void Start () { //随机产生21x5个砖块 for(int i=0;i<21;i++) { for(int j=0;j<5;j++) { //根据i*j的奇偶性产生不同的砖块对象 GameObject UnitObject=null; if(i*j % 2==0) { UnitObject=Units[0]; }else { UnitObject=Units[1]; } //克隆砖块 Instantiate(UnitObject,new Vector3(StartX+i*0.625F,StartY-j*0.625F,-2), Quaternion.Euler(new Vector3(90,180,0))); } } } }其中砖块对象是一个Plane的预设,我们这里准备了黑白两种颜色的Plane预设,这样画面的色彩不会显得单调,主要这里要加上刚体和碰撞器,我们设置其Tag为UnitCube。
接下来,我们为白色横条编写脚本,在这段脚本中,横条只能在游戏界面内水平移动。代码如下:
using UnityEngine; using System.Collections; public class Operator : MonoBehaviour { //球板的移动速度 public float MoveSpeed=3.0F; //移动球板 void Update () { if(Input.GetKey(KeyCode.A)) { //当球拍未超过屏幕左侧时移动球拍,否则球拍不能再移动 if(transform.position.x>-5) { transform.Translate(Vector3.left*Time.deltaTime*MoveSpeed); }else { transform.position=new Vector3(-5,transform.position.y,transform.position.z); } } if(Input.GetKey(KeyCode.D)) { if(transform.position.x<5) { transform.Translate(Vector3.left*Time.deltaTime* (-MoveSpeed)); }else { transform.position=new Vector3(5,transform.position.y,transform.position.z); } } } }
既然已经实现了对于横条的控制,那么我们接下来来实现小球的脚本,小球在游戏开始时会受到一个45度方向的力,这样小球就有了一个初速度,小球的反弹通过Unity的物理引擎来实现。当小球碰到砖块时,砖块将被销毁,玩家得到1分。当小球的位置低于横条的位置时,游戏结束。代码如下:
using UnityEngine; using System.Collections; public class Ball : MonoBehaviour { [HideInInspector] //定义玩家得分 public int Grade=0; //任务是否失败 public bool IsDroped=false; void Start () { //将球旋转45度并向上发射 transform.Rotate(new Vector3(0,1,0) * 45); transform.forward=new Vector3(0,1,0) * 45; transform.rigidbody.AddForce(transform.forward*12F,ForceMode.Impulse); } void Update () { //始终保证球与砖块在同一平面上 transform.position=new Vector3(transform.position.x,transform.position.y,-2); //小球位置检测,低于球板位置时游戏结束 if(transform.position.y<=-4) { //这里添加游戏结束的逻辑 IsDroped=true; } } void OnCollisionEnter(Collision mCollision) { //当碰到砖块时,销毁砖块 if(mCollision.gameObject.tag=="UnitCube") { Destroy(mCollision.gameObject); Grade+=1; } } }好了,现在我们只需要把CubeManager脚本绑定在Background上,把Ball脚本绑定到小球上,把Operator脚本绑定到横条上,我们就可以运行游戏了 。
运行游戏的过程中,我们会发现一个问题就是当小球移动到游戏界面的边缘时会消失。理论上在这个位置小球应该会反弹回来,怎么办呢?我们继续回到游戏界面,在界面的顶部、左侧、右侧分别创建一个和PlayBall、PlayBoard共面的Cube。我们同样为这个Cube设置一个弹性材质.
到目前为止,这个游戏的核心部分已经全部讲解完毕。最后,我们做一个简单的游戏管理器GameManager来实现对玩家得分和游戏状态的更新:
using UnityEngine; using System.Collections; public class GameManager : MonoBehaviour { private GUIText mGrade; public GameObject Target; void Start () { mGrade=transform.GetComponent<GUIText>(); } void Update () { if(!Target.GetComponent<Ball>().IsDroped) { mGrade.text="得分:"+Target.GetComponent<Ball>().Grade.ToString(); }else { mGrade.text="游戏结束,您的得分为:"+Target.GetComponent<Ball>().Grade.ToString(); } } }其中,关于玩家的得分和游戏状态都在Ball脚本中定义,大家可以自己去查阅。好了,这就是今天的博客了,希望对大家有用、希望大家喜欢。
每日箴言:不管是出于意愿还是无知,我们的成功和失败都不是别人招致的,而是自己决定的。——加思·斯坦
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培,本文出处:/article/1479874.html
相关文章推荐
- 【Unity3D自学记录】Unity3D游戏开发之跑酷游戏项目讲解
- [Unity3D]Unity3D游戏开发之跑酷游戏项目讲解
- [Unity3D]Unity3D游戏开发之塔防游戏项目讲解(上)
- Unity3D游戏开发之塔防游戏项目讲解(下)
- [Unity3D]Unity3D游戏开发之飞机大战项目讲解
- Unity3D游戏开发之跑酷游戏项目讲解
- [Unity3D]Unity3D游戏开发之跑酷游戏项目解说
- Unity3D游戏开发之游戏读/存档功能在Unity3D中的实现
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(中)
- 水滴游戏视频-UNITY软件外包、UNITY3D软件开发、UNITY3D游戏开发
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上)
- 1.[Unity3D游戏开发]【宠物养成项目】 项目基础
- [Unity3D]Unity3D游戏开发之飞机大战项目解说
- 一、Unity3D 5.0.1-示例项目“汽车游戏”的展示及开发准备
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
- 2.[Unity3D游戏开发]【宠物养成项目】 代码结构
- Unity3D游戏引擎实战开发从入门到精通(坦克大战项目实战、NGUI开发、GameObject)
- 【Untiy3D 游戏开发之一】Unity3D For Mac最新3.4.1版本破解教程分享并将Unity3D项目在iphone上运行;
- 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置
- 【Untiy3D 游戏开发之一】Unity3D For Mac最新3.4.1版本破解教程分享并将Unity3D项目在iphone上运行