[Unity小游戏]打砖块(打方块)(超详细)
打砖块小游戏通常会被当做Unity学习的第一个案例,下面给大家介绍如何实现打砖块案例的,先来张图看看效果
首先我们要知道QWER分别是选择、移动、旋转、缩放工具的快捷键(英文模式下按住才有用),只有在scene场景中才能对物体进行操作,game视角是相机视角
一、打开Unity,创建一个cube拉伸来当作地面放置方块(要是地形够平就可以不用,直接创建平面也行,我这里按F2重命名为地面)
二、创建一个cube,将它移动到地面的上方,并给它添加Rigibody,使他具备基本的物理属性(简单来说就是被碰撞后会被击飞或者在半空中会掉下来,这是实现打砖块游戏的基础)
三、将此cube移动到Assets中,使他成为一个预制体
四、复制多个Cube,使它成为一堵墙。方法:在scene场景中,点击cube,Ctrl+D复制,选择移动工具,按住CTRL键移动,这样每次最会移动一个预设单位距离
多复制几个后调整位置对齐(因为上传的动图要小于5M所以我没浪费时间对齐,可以按住ctrl移动来对齐)
多选:点击要复制的第一个cube,按住shift的同时点击要复制的最后一个cube,按Ctrl+D,用移动工具在场景里面按住Ctrl拖动,就能够复制出一堵墙。
补充:给方块上色
五、创建一个材质,设置颜色,给cube上色,单击Assets文件夹,右键选择Create ——Material(我这里就不浪费时间,只上色一个)
六、调整相机位置到cube墙体的前方,结合scene和game场景来看相机位置是否合适(可以通过相机的Transform值来调整相机位置)
七、点击相机,给相机添加移动脚本,我给脚本起名为move,点击进入脚本进行编辑
(如果你的脚本名和我的脚本名一样,可以直接复制一下代码,不然需要改class后面的类名)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class move : MonoBehaviour
{
public float speed = 3; //设置一个共有类型的变量 来设置相机移动速度 public类型可以在代码外进行修改 并以代码外修改的数据作为脚本中运行的数据
public float bulletspeed = 50; //子弹速度
private float h; //设置h来获取Horizontal(横轴方向的输入,即A键和D键的输入)
private float z; //设置z来获取Vertical(纵轴方向的输入,即W键和S键的输入)
public GameObject bullet; //定义一个对象:子弹
//start函数中的代码,在游戏开始时会运行一次,后面将不会运行 ,这里用不到
void Start()
{
}
// Update 里面的代码 每一帧都会运行
void Update()
{
float h = Input.GetAxis("Horizontal"); //获取AD键的输入 即水平方向
float z = Input.GetAxis("Vertical"); //获取WS键的输入 垂直方向
transform.Translate(new Vector3(h, z, 0) * Time.deltaTime * speed);
//translate是transform的一个属性 表示平移 Vector3(x,y,z)表示空间中的一个三维向量 我们这里来通过h和z的输入来控制向量的大小来实现相机的位移
//Update一帧执行60次,每帧都new 一个Vector3的话,对内存是一个消耗,所以乘一个 Time.deltaTime后每帧都只执行一次 也就是说 按一下只移动3个单位(speed=3),不然就会移动speed*60个单位
if (Input.GetMouseButtonDown(0)) //如果按下鼠标左键 代码表示为 Input.GetMouseButton(0)
{
//instantiate(克隆对象,克隆位置,克隆角度) transform.position没有前缀 默认为this.transform.potiton 即这个物体的位置
GameObject a = GameObject.Instantiate(bullet, transform.position, transform.rotation); //创建一个和bullet(子弹)一样的对象,位置和相机的位置一样,因为这个脚本是挂在相机上面的;
Rigidbody rgd = a.GetComponent<Rigidbody>(); //把a刚体属性给rgd
rgd.velocity = transform.forward * bulletspeed; //Rigidbody.velocity 这个方法是瞬间给物体一个恒定的速度,将物体提升至该速度。
// transform.forward 是向前的方向 * speed 发射速度
Destroy(a, 2); //两秒后摧毁a 即子弹
}
}
}
Ctrl+S保存!!!
八、回到Unity中制作子弹预制体,在这之前我们把所以cube都放在一个空物体下,点击scene右键创建一个空物体,利用shift键选中所有cube,拖拽至gameobject下,按F2可以重命名,我将它命名为方块墙
创建子弹预制体:在空白面板处右键创建sphere(球体),点击sphere,在其Transform面板下找到Scale(缩放),我将其各个方向的大小都缩放至0.1 使其成为子弹的大小,并将其拖拽至Assets下使之成为预制体。
然后在scene下把sphere删除掉(文件中还是会有sphere,不用担心,下图为删除后的样子)
九、给预制体sphere添加Rigidbody组件,使其具备物理属性,在代码中也调用了其物理属性,所以得加上
加上Rigidbody后再将sphere拖拽至相机move脚本下的bullet中,使之实例化,代码中的bullet就成了游戏中的sphere了
十、点击运行按钮即可运行,WASD控制移动,鼠标左键发射。
ohhh这样我们的第一个Unity案例就完成了!是不是很激动!!
————————————————分割线———————————————
前几天上课突然来了灵感,制作了一款打砖块游戏,下面附有链接,里面有三种游戏模式,有三个彩蛋,告诉大家一个彩蛋 第一个游戏中按7次N再按K 可以用大方块射击 第一个游戏需要在4秒内击落所有方块 第二个游戏需要在23秒内击落23个方块
在我的资源里面也有:点击下载
(gif动图太大了,只能录一小部分,感兴趣的可以下载一个玩玩,37M大小,最新的2.3.2版本,可以在我的资源里面找到1.0.0版本,1.0.0版本为最初版本,只有一个功能)