Unity-2017.2官方实例教程Roll-a-ball(二)

声明:

本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/97b630a23234

上一节Unity-2017.2官方实例教程Roll-a-ball(一)我们讲到了:

一、如何创建一个新项目(Project)

二、如何创建一个新的游戏场景(Scene)

三、如何添加基本的游戏对象(GameObject)

四、如何添加灯光(Light)

五、如何给游戏对象添加脚本(Script)

如果运行过游戏的朋友就会发现一个问题,虽然我们可以控制球体运动了,但是游戏视角好像不会随着球体而移动,球体一下子就会跑到摄像机看不到的地方去了,那么这一节我们就会学习以下内容:

一、如何让摄像机跟随球体移动

二、制作围墙来防止球体跑出平台

三、添加一个自带旋转动画的方块

四、制作一个Prefab和使用Global模式

五、让球体可以拾取方块

六、如何实现一个简单的计分板UI(Text)

七、如何发布游戏(Build)

一、让摄像机跟随球体移动

首先我们选中我们的摄像头(Main Camera),然后我们会看到如下的情况:

在上图中,我们可以看到,在Scene窗口的右下角,也就是图中红框处,有一个小窗口,这个窗口就显示我们此时选中的摄像机所有看到的内容,方便我们调整摄像机的位置,所以我们先拖动摄像机的位置和角度,来处于一个合适的视角,本例中,我们将摄像头的Position的Y和Z分别调至5和-6,然后把其的Rotation的X值调至45,这样摄像机的视角就变成了45°俯视角:

视角调整好后,我们接下来要让摄像头跟随球体来移动,我们第一个想到的办法,也是最简单的方法,就是把摄像机变成球体的一个子对象,这样球体移动,摄像机也会跟着变化,我们马上做做看:

Tips:把摄像机变成球体的一个子对象的方法是:把Main Camera对象拖到Player对象上

然后我们运行游戏,我们发现摄像头的确是跟着球体移动了,但是它不止位置跟着球体变化,他的角度也会跟着球体变化,这样摄像头就会出现天旋地转的效果,这不是我们想要的效果。

Tips: Unity中,子对象的Transform属性会跟随父对象一起进行变化

我们想要的效果只需要摄像机的位置跟随球体移动,角度不需要,所以我们只能用脚本来实现这一效果,首先我们给摄像机添加一个脚本(大家应该还记得如何添加吧,不记得可以回去看第一节的内容,这里就不再重复介绍了),我们给脚本命名为CameraController,脚本语言选择C#。然后我们看看脚本内容:

(1)、首先,我们定义了一个public的GameObject变量,这个变量就是用来告诉程序,摄像机会跟随哪个GameObject来移动

(2)、然后我们定义一个private的Vector3的变量,这个变量我们主要用来记录摄像机初始的位置,用作之后更新摄像机的位置的偏移向量

(3)、然后我们在Start方法中,摄像机的position数值赋给offset变量,意思是在开始前,用offset变量记录下摄像机的初始位置

(4)、最后我们在LateUpdate方法中,把摄像机的位置变更为球体的位置加上最开始的偏移位置

Tips:这里其实脚本中使用Update方法一样可以达到效果,但是我们使用LateUpdate(最后更新)效率会更高一点

写完脚本内容后,我们保存一下脚本,然后回到Unity编辑器界面,我们会发现摄像机的脚本组件中,多了一个Player属性,如下图:

这就是我们刚刚在脚本中定义的public类型的属性。

Tips:在Unity脚本中,public的属性会在编辑器中显示出来

然后我们把球体拖入到Player属性中,如下图:

接下来我们运行一下游戏,就可以发现摄像机现在可以正常跟随球体移动了。

二、制作围墙,防止球体跑出平台

摄像机可以跟随球体移动后,我们又看到一个问题,球体如果移动超过平台的边界,就会掉下去,这不太友好,所以我们接下来给平台加上一圈围墙,来防止球体跑出平台

我们新建一个cube对象,然后reset他的Transform属性会发现cube和球体挡住到了一起,这样不方便我们来编辑cube:

为了方便编辑cube,我们可以暂时不显示球体,我们选中球体,将球体的Inspector下方的勾选去掉,如下图:

这样一来,球体就展示在我们的Scene窗口中不显示了。接下来我们可以编辑cube的属性,将其的长度设置成和平台一样,然后将其的位置移动到平台北面的边缘,如下图:

然后同样的,我们给平台的南面,西面,东面都制作一堵墙,如下图:

然后在运行一下,可以看到球体就没法跑出平台了。

Tips:运行时记得把Player显示出来

三、制作一个旋转的方块

有了平台,有了球体,接下来我们就需要一个方块,这个方块可以让球体碰撞并拾取,为了让方块变得有吸引力一点,我们让方块可以自动旋转起来,首先我们创建一个cube对象(不要忘记创建GameObject之后的两个标准动作),然后我们将cube命名为PickUp,并把它的Rotation的X、Y、Z值都设置为45,然后将其拖动到一个你觉得合适的位置,比如这样:

之后我们给这个方块添加一个自动旋转的脚本,脚本名称为Rotator,脚本内容如下:

里面我们就添加了一句话,Time.deltaTime就是根据时间变化来改变方块的Rotation属性,从而达到旋转的效果,保存脚本,然后运行一下,就可以看到方块自己旋转起来了。

四、制作一个Prefab和使用Global模式

为了让游戏丰富起来,我们只有一个方块是不够的,因此我们需要多创建几个方块,在这之前呢,我们需要先制作一个Prefab(预制件),制作一个预制件有以下好处:

(1)、一次制作,重复使用,可以在任何项目中使用Prefab

(2)、一次修改,全部变化,我们修改Prefab的属性后,所有使用该Prefab的对象属性都会跟着发生变化

而制作Prefab的方法也非常简单,我们为了资源管理方便,先在Assets文件夹下面创建一个Prefabs文件夹来存放Prefab文件,然后在Prefabs文件夹下新建一个Prefab,重命名为PickUp,拖动Pickup(刚才新建的Cube)对象到PickUp(Prefab资源),一个Prefab就创建好了,具体步创建方法有两种:

第一种:首先点击选中Assets文件夹下的Prefabs文件夹,点击菜单栏的Assets->Create->Prefab

第二种:点击选中Assets文件夹下的Prefabs文件夹,右键->Create->Prefab

然后我们可以复制PickUp对象,并拖拽新的PickUp到合适的位置,此时你会发现拖拽没有办法保持Y轴不变,因此为了方便我们移动PickUp对象的位置,我们先将Scene视图改为Y轴模式:

然后将Local模式改为Global模式:

此时我们便可以方便的调整PickUp对象的位置了,最后效果如下:

从图中我们可以看到,一共拥有8个PickUp方块。

五、让球体拾取方块

接下来我们实现球体拾取方块的功能,我们通过查API得知有一个OnTriggerEnter的方法可以用来在球体碰到物体的时候调用(触发器),光有这个方法还不够,我们还需判断球体碰到的是什么东西,我们不能碰到任何东西都拾取,所以我们需要给被拾取的方块增加一个标记(Tag),增加标记的方法如下:

(1)、因为我们场景里面一共有8个方块,如果一个个的设置标记,就有点太麻烦了,还记得上面我们提到的Prefab的第2点好处吗?对了,这边我只需要给Prefab标记就可以了

(2)、首先我们选中PickUp Prefab,然后在Inspector视图的Tag里面新增一个Tag,我们命名为PickUp

接下来我们就可以进行脚本编写了,我们打开球体的PlayerController脚本,然后新增下面的代码:

首先这里other变量代表球体碰到的对象,在这个方法里面,我先用if语句判断碰到的对象的Tag是否等于“PickUp”,如果等于,我就将碰到的对象设置为不激活(不显示)

做完这些,我们就可以运行一下游戏,看看效果。我们运行了游戏发现,球体碰撞方块并没有将它拾取,这是为什么呢?原因是我们没有将方块设置为碰撞触发器(Is Trigger),只有设置成碰撞触发器,我们才可以的OnTriggerEnter方法才能起效果,在这里我们还是给Prefab设置成Is Trigger属性,这样每个方块都有了这个属性。设置完成后,再运行游戏,可以发现,现在球体碰到方块就可以拾取了。

六、制作一个计分板

好了,我们的游戏基本可以玩了,但是我们还需给玩家增加一点刺激,做一个计分板来鼓励玩家多拾取方块,那么实现一个计分板我们需要以下元素:

(1)、用一个变量保存玩家的分数

(2)、然后将分数显示在UI上面

首先我们修改PlayerController脚本,如下:

上图第一个红框处,我们定义了一个count变量用来保存分数,然后在Start方法中将Count的值初始化为0,即我们在游戏开始时,将分数初始化为0,最后我们在拾取方块的时候,把count的数值加1。现在我们有了变量来记录分数,但是我们还没有显示给玩家,所以我们需要一个UI来显示分数,我们创建一个文本UI(Text),然后我们调整Text的位置至屏幕的左上角:

接下来我们再次修改PlayerController,如下:

(1)、在代码最前面,我们需要引入UnityEngine.UI,只有这样后面代码才会识别Text类型的变量

(2)、然后我们在定义countText变量来保存UI Text

(3)、接着我们在Start方法中调用setCountText方法,来更新countText的内容

(4)、然后我们在每次球体碰到方块的时候,也需要更新countText的内容

(5)、最后是我们定义的setCountText方法

然后我们保存代码,回到Unity编辑器里面,将Text拖入到Player里面的Count Text属性:

做完这些,我们就可以运行游戏,看到效果了!

七、发布游戏

游戏到这里我们就告一段落了,接来下我们可以尝试将游戏发布,Unity发布游戏非常简单:

(1)、首先选择File->Build Settings

(2)、我们选择PC平台,然后点击Switch Platform

(3)、我们点击Add Current按钮,将当前游戏场景加入进去

(4)、点击Build按钮,然后选择保存路径,就可以完成发布了

最后我们找到保存路径下生成的文件,点击exe文件,就可以运行游戏了。

时间: 2024-10-28 09:10:02

Unity-2017.2官方实例教程Roll-a-ball(二)的相关文章

Unity-2017.3官方实例教程Space-Shooter(二)

由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(一) 章节列表: 一.创建小行星Prefab 二.创建敌机和敌机子弹Prefab 三.创建游戏控制器 四.添加音效 五.对象回收 六.创建计分板 一.创建小行星Prefab a.创建一个空对象,重命名为Asteroid_01,在Models文件夹下找到prop_asteroid_01模型,将模型拖拽到Asteroid_01上,使其成为Asteroid_01的

Unity官方案例进阶--Roll a ball

经过上一次的学习,我又想改进一下这款 Roll a ball 游戏,首先这款游戏只有胜利没有失败,所以我想定义一个条件来控制它的输赢,因此我想到了如下的方案: **使我们的玩家控制 Player 在规定时间内达到一定的分数就胜利,反之则失败** 任务目标 这里只是大概的目标内容,还有一些细节会在后面完成的时候体现出来. 完成 PickUp 的随机刷新出现,每隔3秒刷新一个 做一个倒计时器用于显示游戏剩余时间 控制分数和时间,若玩家在规定时间内达到分数则显示 You Win!字样,Player 禁

Unity-2017.3官方实例教程Space-Shooter(一)

由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. 章节列表: 一.从Asset Store中下载资源并导入 二.设置相机投影模式(Projection) 三.创建背景(BackGround) 四.设置灯光(Lighting) 五.创建玩家对象(Player) 一.从Asset Store中下载资源并导入 首先我们新建一个工程,然后点击Window->Asset Store,搜索Space Shooter,找到如下资源: 点击资源进入资源详情,点击导入即可导入. 如果已经

Unity 5.3 官方VR教程(二) 创建第一个VR项目

为了准备好学习使用Unity开发VR应用,我们首先要检查下自己的电脑硬件和软件配置是否满足要求.简单来说,显卡要NVIDIA GTX970或AMD290以上,CPU要Intel i5-459以上,内存8GB以上,要有两个USB3.0接口,一个USB2.0接口,一个HDMI 1.3接口. 注意在打开Unity前要把DK2连接好并开启. 在继续之前,打开Oculus Configuration Utility应用,并检查Demo Scene可以正常运行.注意在运行Demo Scene之前看可能需要在

Unity-2017.2官方实例教程Roll-a-ball(一)

声明: 本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/6e4b0435e30e 文中章节列表如下所示: 一.如何创建一个新项目(Project) 二.如何创建一个新的游戏场景(Scene) 三.如何添加基本的游戏对象(GameObject) 四.如何添加灯光(Light) 五.如何给游戏对象添加脚本(Script) 一.如何创建一个新的项目(Project) 创建项目有两种方式,第一种是在没有打开Unity工程的情况下创建项目

Unity 官方案例 Roll a ball

终于找到免费科学上网的方法了,虽然 速度一般,但对于学习unity官方视频来说还行. 废话不多的说,这次学习官方案例 Roll a ball,就是控制小球在平台上吃食物,这么一个简单的游戏.对于unity的一些基本操作,我就不在博客中介绍了,所以还请各位朋友先学会unity的基本操作,几乎只需要知道unity的面板有几块,分别操作什么,怎么创建物体,脚本,以及给物体添加组件,就可以学习本博客了. 好,现在开始.先创建一个3D项目,名字就叫做 Roll a ball, 在Assert 目录下创建几

QML官方系列教程——Scalability

附网址:http://qt-project.org/doc/qt-5/scalability.html Scalability -- (多屏)扩展性 Qt Quick使你开发的应用程序能够在类似桌面,手持设备等多个不同的平台上运行.特别地,它们还能够应付不同的的屏幕配置:尺寸,密度,方向,分辨率以及纵横比. 在这些情况下你需要考虑程序的扩展性: · 你希望将应用程序部署在多个平台,比如Android,BlackBerry,iOS,或者不同的屏幕配置以及物理尺寸的设备上. · 有些新的设备出现在你

hibernate官方新手教程 (转载)

hibernate官方新手教程第一部分 - 第一个Hibernate程序 首先我们将创建一个简单的控制台(console-based)Hibernate程序.我们使用内置数据库(in-memory database) (HSQL DB),所以我们不必安装不论什么数据库server. 让我们如果我们希望有一个小程序能够保存我们希望关注的事件(Event)和这些事件的信息. (译者注:在本教程的后面部分,我们将直接使用Event而不是它的中文翻译“事件”,以免混淆.) 我们做的第一件事是建立我们的开

超详细Windows版本编译运行React Native官方实例UIExplorer项目(多图慎入)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50661981 本文出自:[江清清的博客] (一)前言 特别说明:群里很多童鞋都在说想Windows系统官方实例,但是官方提供的文档以及网上的例子都是OS X版本.今天特意给大家更新一下Windows版本运行官方 实例(UIExporler)全过程.俗话说学习一样新东西的时候,例如这边我们要学React Native的组件使用,那么最好的学习资料就是官方提供的材料了,