当前位置:主页 > 查看内容

unity学习之小球吃方块小游戏(从制作到发布程序,超详细全教程

发布时间:2021-06-21 00:00| 位朋友查看

简介:unity学习时做的小球吃方块的实验报告过程 通过创建对象、添加脚本、控制相机跟随、旋转对象、碰撞检测、显示文本和发布程序七个实验来对三维建模工具Unity 3D游戏建模过程中的场景、Plane、Sphere、Cube对象、脚本、碰撞检测、UI以及程序发布等问题进行学习……

unity学习时做的小球吃方块的实验报告过程:
通过创建对象、添加脚本、控制相机跟随、旋转对象、碰撞检测、显示文本和发布程序七个实验来对三维建模工具Unity 3D游戏建模过程中的场景、Plane、Sphere、Cube对象、脚本、碰撞检测、UI以及程序发布等问题进行学习和练习。在实验最后列出了Unity 3D的各个菜单栏以及它们所包含的下拉菜单及其译名。
(超详细全教程,保姆式教学包你学会)
实验2.1 创建对象
实验目的
1.掌握在Unity 3D中创建项目、场景、Plane和Sphere等。
2.掌握在Unity 3D中材质的应用。
实验要求
学会在Unity 3D中创建项目、场景、Plane和Sphere,学会材质的应用。
实验内容
【实验2-1】创建PlayBall小球吃金币游戏项目,创建地面和小球。
操作步骤:
1)新建项目,依次输入项目名称,选择项目存储路径,如图2-1所示。
图2-1新建Unity 3D项目

2)点击“Create project”创建项目进入Unity 3D界面,右上角“Layout”可修改布局,Unity 3D有多种布局,读者可以根据自己的习惯选择,下图为“Layout”|“Tall”布局,本实验截图均为Tall布局,如图2-2所示。
图2-2 Unity 3D中Tall布局

3)在“Project”窗口中新建文件夹Scenes,存储游戏场景,按“Ctrl+S”存储当前游戏场景main,如图2-3所示。
在这里插入图片描述

图2-3新建Scenes文件夹
4)在“Hierarchy”窗口中创建游戏地面,右键选择“3DObject”|“Plane”,因为其为游戏地面,将其命名为Ground,如图2-4所示。
在这里插入图片描述

图2-4新建Plane对象
5)选中Ground对象,在“Inspector”窗口的“Transform”右侧的齿轮选择“Reset”,将地面对象放置在坐标系原点,如图2-5所示。
在这里插入图片描述

图2-5 选择Reset
6)若想修改该地面对象表面颜色,需要为其添加材质。在“Project”窗口中新建文件夹名为Materials,存储材质,在Materials文件夹中新建“Material”材质文件,如图2-6所示。
在这里插入图片描述

图2-6 新建Material材质文件
7)将“Material”命名为Ground,选中Ground材质,在“Inspector”窗口中修改“Albedo”颜色为淡蓝色,如图2-7所示。
在这里插入图片描述

图2-7修改Albedo
8)将该材质与Plane进行关联,将Ground材质用鼠标左键拖动到“Hierarchy”窗口中的Ground对象上,如图2-8所示。
在这里插入图片描述

图2-8 将材质与Plane关联
9)在“Hierarchy”窗口创建游戏主角小球对象,右键选择“3D Object”|“Sphere”,并将其命名为Player,如图2-9所示。
在这里插入图片描述

图2-9 创建游戏主角小球对象
10)将小球对象放置在坐标系原点,选中小球Player对象,在“Inspector”窗口的“Transform”右侧的齿轮选择“Reset”,如图2-10所示。
在这里插入图片描述

图2-10将小球对象设置在原点
11)选择移动按钮,,向上拖动“y”轴绿色箭头,将小球拖到地面上方,如图2-11所示。
在这里插入图片描述

图2-11将小球对象设置在地面上方
12)点击播放按钮查看游戏运行效果,如图2-12所示。
在这里插入图片描述

图2-12查看游戏运行效果
13)为小球添加重力。在“Hierarchy”窗口选择小球Player对象,在“Inspector”窗口点击最小面的“Add component”添加组件按钮,添加“Rigidbody”刚体组件,如图2-13所示。
在这里插入图片描述

图2-13 添加Rigidbody刚体组件
14)点击播放按钮查看与没加刚体组件时的区别,如图2-14所示。
在这里插入图片描述

图2-14 添加Rigidbody刚体组件后游戏运行效果
实验2.2 添加脚本
实验目的
1.掌握在Unity 3D中创建脚本的方法。
2.掌握在Unity 3D中修改对象的属性。
实验要求
学会在Unity 3D中创建脚本以及修改对象的属性。
实验内容
【实验2-2】创建脚本使小球动起来,并用键盘控制小球的运动。
操作步骤:
1)为使小球运动起来,要为小球对象添加脚本文件。在“Project”窗口中新建文件夹Scripts,存储脚本文件,在“Hierarchy”窗口选择小球Player对象,在“Inspector”窗口点击最下面的“Add component”添加组件按钮,输入Player,选择“New Script”,Language选择默认的“C Shape”,点击“Creat and Add”创建脚本文件,如图2-15所示。
在这里插入图片描述

图2-15 为对象添加C Shape脚本
2)将Player脚本文件拖入到Scripts文件夹中,如图2-16所示。
在这里插入图片描述

图2-16 将Player脚本文件拖入到Scripts文件夹中
3)双击player脚本文件,进入编辑器,本例进入的是Microsoft Visual Studio编辑器,如图2-17所示。
在这里插入图片描述

图2-17 进入Microsoft Visual Studio编辑器
4)为使小球运动起来,需要先得到小球刚体,并对刚体施加一个方向的力,具体代码如下:

using UnityEngine;
using System.Collections;
publicclassplayer : MonoBehaviour {
privateRigidbody rd;    //定义刚体对象
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();   //取得小球的刚体
	}
		// Update is called once per frame
	void Update () {
        rd.AddForce(newVector3(1, 0, 0));  //对小球刚体施加一个单位X轴正向的力
	}}

5)点击播放,查看小球运动状态,如图2-18所示。
在这里插入图片描述

图2-18 小球向右滚动
6)将上例中的Vector3(1, 0, 0)修改为Vector3(-1, 0, 0)播放查看运动效果,或者修改为Vector3(0, 0, 1)和Vector3(0, 0, -1)分别查看效果。
7)用键盘控制小球的移动,需要先取得输入,再通过输入控制小球的移动,修改Update代码:

Void Update () {
float h = Input.GetAxis("Horizontal");//取得键盘的水平输入
         rd.AddForce(new Vector3(h, 0, 0));
	}

8)点击播放,试着按键盘的左右方向或者“A”“D”键控制小球的水平方向移动,修改Update代码,实现控制小球四个方向的移动

void Update () {
float h = Input.GetAxis("Horizontal");  //取得键盘的水平输入
float v = Input.GetAxis("Vertical");    //取得键盘的垂直输入
rd.AddForce(new Vector3(h, 0, v) * 5);
}

9)至此可以用键盘实现对小球的方向控制,若果想使小球运动的更快,可以对施加的力乘上系数,代码如下:
rd.AddForce(new Vector3(h, 0, v) * 10); //对施加的力乘以系数
10)也可将力的系数设为公共变量,这样随时可以在Unity 3D页面修改系数的值,代码如下:

using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;    //定义公共变量force,为施加力的系数
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(new Vector3(h, 0, v) * force);   //对施加的力乘以系数
	}
}

11)设置公共变量之后,在Player对象的“Inspector”窗口可以看到,player脚本中多了Force值,这样随时可以在Unity 3D页面修改力的系数值,如图2-19所示。
在这里插入图片描述

图2-19 player脚本中多了Force值
12)增大游戏地面面积。在“Hierarchy”窗口选择Ground对象,在“Inspector”窗口的“Transform”中修改“Scale”值,将X、Z都修改为2,如图2-20所示。
在这里插入图片描述

图2-20 增大地面面积
实验2.3 控制相机跟随
实验目的
1.掌握在Unity 3D中移动和选择对象等操作。
2.了解在Unity 3D中控制相机跟随的方法。
实验要求
学会在Unity 3D中移动和选择对象等操作及了解控制相机跟随的方法。
实验内容
【实验2-3】控制相机跟随小球移动。
操作步骤:
1)点击移动按钮,选择相机对象,向上拖动“Y”轴,将其拖动到稍高一点的位置,每次调整相机时,在右下角会出现相机预览图,以便观察其视野,如图2-21所示。
在这里插入图片描述

图2-21移动相机位置
2)点击旋转按钮,旋转相机角度,使其面向小球,如图2-22所示。
在这里插入图片描述

图2-22 旋转相机角度
3)若想相机跟随小球运动,需要为相机添加脚本。在“Hierarchy”窗口选择“Main Camera”对象,在“Inspector”窗口点击最小面的“Add component”添加组件按钮,输入follow,选择“New Script”,选择默认的“C Shape”语言,点击“Creat and Add”创建脚本文件,如图2-23所示。
在这里插入图片描述

图2-23创建follow脚本
4)将follow脚本拖入到Scripts文件夹中。若想相机跟随小球运动,需要相机与小球的距离保持不变。首先,在follow脚本中要取得小球的位置信息。代码如下:

using UnityEngine;
using System.Collections;
public class follow : MonoBehaviour {
public Transform playerTransform;   //定义公共变量记录小球的位置信息
	// Use this for initialization
	void Start () {
	}
	// Update is called once per frame
	void Update () {
	}
}

5)公共变量定义好后,在“Main Camera”对象的“Inspector”窗口可以看到,follow脚本中多了playerTransform,将“Hierarchy”窗口中的小球Player对象拖到playerTransform上,使playerTransform绑定小球的位置信息,如图2-24所示。
在这里插入图片描述

图2-24 创建follow脚本
6)取得小球的位置信息后,添加代码实现相机跟随小球移动,代码如下:

using UnityEngine;
using System.Collections;
public class follow : MonoBehaviour {
public Transform playerTransform;   //定义公共变量记录小球的位置信息
private Vector3 offset;    //定义相机和小球之前的距离
	// Use this for initialization
	void Start () {
    		offset = transform.position - playerTransform.position;    //计算相机和小球之间距离
	}
	// Update is called once per frame
	void Update () {
      	transform.position = playerTransform.position + offset;  //保持距离
	}
}

实验2.4 旋转对象
实验目的
1.掌握在Unity 3D中创建cube对象。
2.了解在Unity 3D中旋转对象的方法。
实验要求
学会在Unity 3D中创建cube对象并了解旋转对象的方法。
实验内容
【实验2-4】控制小球移动范围并加入可旋转的金币。
操作步骤:
1)创建地面边界墙,在“Hierarchy”窗口创建cube对象,右键选择“3D Object”|“Cube”,选中cube对象,在“Inspector”窗口的“Transform”中修改“Position”的X、Y、Z为0,0,10,“Scale”的X、Y、Z为20,2,1,如图2-25所示。
在这里插入图片描述

图2-25 创建一个地面边界墙
2)在“Hierarchy”窗口选中cube对象,按“Ctrl+D”复制cube对象,分别创建其他三面墙体,三面墙体的“Transform”参数分别为(PositionX、Y、Z为0,0,-10,ScaleX、Y、Z为20,2,1)、(PositionX、Y、Z为10,0,0,ScaleX、Y、Z为1,2,20)、(PositionX、Y、Z为-10,0,0,ScaleX、Y、Z为1,2,20),如图2-26所示。
在这里插入图片描述

图2-26 创建四个地面边界墙
3)在“Hierarchy”窗口中,将创建好的四个cube墙体对象拖动到Ground对象上,形成父子关系,如图2-27所示。
在这里插入图片描述

图2-27 形成父子关系
4)创建可收集的金币。在“Hierarchy”窗口新建cube对象,命名为Pickup,选中cube对象,在“Inspector”窗口的“Transform”中修改“Rotation”的X、Y、Z为45,45,45,“Scale”的X、Y、Z为0.5,0.5,0.5,如图2-28所示。
在这里插入图片描述

图2-28 新建金币
5)点击Local按钮,切换成全局坐标系,调整该cube对象的高度,使其立在地面上,如图2-29所示。

在这里插入图片描述

图2-29金币立在地面之上
6)在Materials文件夹中新建Material,将Material命名为Pickup,选中Pickup材质,在“Inspector”窗口中修改“Albedo”颜色为金色,并将该材质与Pickup对象关联,如图2-30所示。
在这里插入图片描述

图2-30为金币设置材质
7)因为还要创建很多个Pickup对象,所以把Pickup对象做成预制体,在“Project”窗口中新建文件夹Prefabs,存储预制体,将“Hierarchy”窗口中的Pickup对象用鼠标左键拖动到该文件夹内,如图2-31所示。
在这里插入图片描述

图2-31 预制体
8)将Prefabs文件夹中的Pickup对象拖入到左侧的舞台上,调整高度,使其立于地面上,选中Pickup对象,并按“Ctrl+D”复制多个,调整位置,如图2-32所示。
在这里插入图片描述

图2-32 复制金币并调整位置
9)在“Hierarchy”窗口中,创建空的游戏物体“Create Empty”,并将该游戏物体放到原点,将所有的Pickup放到该物体上,如图2-33所示。
在这里插入图片描述

图2-33 将所有的Pickup放到Pickups上
10)为了使所有的Pickup都旋转,选择“Project”窗口下Prefabs文件夹中的Pickup,在“Inspector”窗口点击最小面的“Add component”添加组件按钮,输入pickup,选择“New Script”,选择默认的“C Shape”语言,点击“Creat and Add”创建脚本文件,并将该脚本放在Scripts文件夹下,如图2-34所示。
在这里插入图片描述

图2-34 将脚本放在Scripts文件夹下
11)双击进入该脚本,添加如下代码,使金币旋转起来。

using UnityEngine;
using System.Collections;
public class pickup : MonoBehaviour {
	// Use this for initialization
	void Start () {
	}
	// Update is called once per frame
	void Update () {
        transform.Rotate(new Vector3(0, 1, 0));  //使对象绕y轴旋转
	}
}

12)点击播放,游戏运行如图2-35所示。
在这里插入图片描述

图2-35金币旋转效果
实验2.5 碰撞检测
实验目的
1.掌握在Unity 3D中为对象设置标签。
2.了解在Unity 3D中碰撞检测的方法。
实验要求
学会在Unity 3D中为对象设置标签以及了解碰撞检测的方法。
实验内容
【实验2-5】实现小球吃掉金币效果。
操作步骤:
1)为了检测小球碰撞到金币还是墙体,为金币Pickup对象设置标签,选择“Project”窗口下Prefabs文件夹中的Pickup,在“Inspector”窗口“tag”下拉菜单中选择“Add Tag”,如图2-36所示。
在这里插入图片描述

图2-36 tag下拉菜单中选择Add Tag
2)进入如图2-37界面。
在这里插入图片描述

图2-37 Add Tag界面
3)点击“+”,添加标签Pickup,如图2-38所示。
在这里插入图片描述

图2-38 添加标签Pickup
4)再次选择“Project”窗口下Prefabs文件夹中的Pickup,在“Inspector”窗口“tag”下拉菜单中选择Pickup,如图2-39所示。
在这里插入图片描述

图2-39 tag下拉菜单中选择Pickup
5)为了实现小球碰撞金币使金币消失,打开Player脚本,修改代码如下:

using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(new Vector3(h, 0, v) * force);
	}
void OnCollisionEnter(Collision collision) {//碰撞检测函数
if(collision.collider.tag == "Pickup") {//判断小球是否碰到金币
            Destroy(collision.collider.gameObject);   //使金币消失
        }
}

}
6)运行游戏效果如图2-40所示。
在这里插入图片描述

图2-40 小球碰撞金币效果
7)游戏运行后发现,在碰撞金币使金币消失时,会有撞到物体的反弹效果,如果不想要这种效果,首先选择“Project”窗口下Prefabs文件夹中的Pickup,在“Inspector”窗口“Box Collider”中,勾选“Is Trigger”,如图2-41所示
在这里插入图片描述

图2-41 Box Collider界面
8)修改Player脚本如下:

using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
	// Use this for initialization
	void Start () {
        	rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        rd.AddForce(new Vector3(h, 0, v) * force);
	}
void OnTriggerEnter(Collider collider)    //检测接触
    {
if(collider.tag == "Pickup")
        {
            Destroy(collider.gameObject);
        }
}
}

实验2.6 显示文本
实验目的
1.了解在Unity 3D中UI的使用方法。
实验要求
了解在Unity 3D中UI中Text控件的使用方法。
实验内容
【实验2-6】在小球吃掉金币时显示分数以及吃光所有金币后显示胜利。
操作步骤:
1)如果想在小球吃掉金币时加分,并实时显示分数,修改Player代码如下:

using UnityEngine;
using System.Collections;
public classplayer : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
private int score = 0;   //定义分数变量
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(new Vector3(h, 0, v) * force);
	}
void OnTriggerEnter(Collider collider)
    {
if(collider.tag == "Pickup")
        {
            score++;      //每次接触金币对分数加1
            Destroy(collider.gameObject);
        }
}
}

2)若想在游戏时显示分数,需要加入UI,在“Hierarchy”窗口中,右键“UI”|“Text”,切换到2D显示,如图2-42所示。
在这里插入图片描述

图2-42 2D显示
3)选择Text对象,在“Inspector”窗口“Rect Transform”中,点击左侧方框,按住“Alt”键,选择左上角的方框,如图2-43所示。
在这里插入图片描述

图2-43 Text控件布局
4)调整Text位置,将其向右下稍微调整,游戏运行,效果如图2-44所示。
在这里插入图片描述

图2-44 显示Text
5)为了在Text对象中显示分数,需要将Text对象与Player脚本关联,修改Player脚本代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
public Text text;      //定义Text公共变量,准备关联Text对象
private int score = 0;
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(new Vector3(h, 0, v) * force);
	}
void OnTriggerEnter(Collider collider)
    {
if(collider.tag == "Pickup")
        {
            score++;
            Destroy(collider.gameObject);
        }
}
}

6)在Player对象的脚本中会出现Text,将Text对象拖入到Text后面的框中,如图2-45所示。
在这里插入图片描述

图2-45 将Text对象拖入到Text后面的框中
7)通过拖动已经在Player中取得了Text对象,然后将分数传递给Text,修改Player代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
public Text text;
private int score = 0;
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(new Vector3(h, 0, v) * force);
	}
void OnTriggerEnter(Collider collider)
    {
if(collider.tag == "Pickup")
        {
            score++;
            text.text = score.ToString();   //将分数赋值给Text
            Destroy(collider.gameObject);
        }
}
}

8)运行游戏,效果如图2-46所示。
在这里插入图片描述

图2-46 小球吃金币效果
9)当把所有金币都吃掉后,显示游戏胜利。在“Hierarchy”窗口中,在“Canvas”上右键“UI”|“Text”,再创建一个Text用来显示胜利信息,如图2-47所示。
在这里插入图片描述

图2-47 新建Text(1)
10)选择调整按钮在这里插入图片描述
调整Text(1)对象的大小,在Text(Script)中修改Text(1)的一些属性,如图2-48所示。
在这里插入图片描述

图2-48 Text(Script)界面
11)在“Inspector”窗口中取消Text(1)前面的对号,使其在游戏刚开始运行时不显示,如图2-49所示。
在这里插入图片描述

图2-49 在Inspector中取消Text(1)前面的对号
12)用同样的方法关联Player和Text(1)对象,并修改Player脚本的代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class player : MonoBehaviour {
private Rigidbody rd;
public int force = 5;
public Text text;
private int score = 0;
public GameObject winText;   //定义存放胜利消息的Text
	// Use this for initialization
	void Start () {
        rd = GetComponent<Rigidbody>();
	}
	// Update is called once per frame
	void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
        	rd.AddForce(newVector3(h, 0, v) * force);
	}
void OnTriggerEnter(Collider collider)
    {
if(collider.tag == "Pickup")
        {
            score++;
            text.text = score.ToString();
if(score == 12)
            {
                winText.SetActive(true);  //如果全部金币(本例为12个)全部吃完,显示胜利消息
            }
            Destroy(collider.gameObject);
        	}}}

13)在Player对象的脚本窗口中会出现winText,将Text(1)对象拖入到winText后面的框中,如图2-50所示。
在这里插入图片描述

图2-50 Player对象的脚本窗口
14)运行游戏,当吃光所有金币后效果如图2-51所示。
在这里插入图片描述

图2-51 吃光所有金币显示胜利
实验2.7 发布程序
实验目的
1.掌握在Unity 3D中发布程序的方法。
实验要求
掌握在Unity 3D中发布程序的方法以及运行发布后的程序。
实验内容
【实验2-7】发布PlayBall的Windows程序并运行该程序。
操作步骤:
1)发布windows平台的exe游戏,点击“File”|“Build Setting”,如图2-52所示。
在这里插入图片描述

图2-52 Build Setting界面
2)选择“PC,Mac&Linux…”,选择“TargetPlatform”|“Windows”,“Architecture”中x86为32位操作系统应用程序,x64为64位应用程序,根据实际情况选择即可,点击“Build”即可发布程序。
3)运行exe文件运行游戏,如图2-53所示。
在这里插入图片描述

图2-53 游戏运行开始界面
4)勾选Windows,点击“Play”运行游戏,如图2-54所示。
在这里插入图片描述

图2-54 PlayBall游戏界面

附Unity 3D的各个菜单栏以及它们所包含的下拉菜单及其译名
主菜单 包含的子菜单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

;原文链接:https://blog.csdn.net/qq_42437783/article/details/115609379
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐