声明:

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

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

文中章节列表如下所示:

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

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

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

四、如何添加灯光(Light)

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

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

创建项目有两种方式,第一种是在没有打开Unity工程的情况下创建项目,第二种是在已经打开了Unity工程的情况下,再新建一个项目,两种情况如下所述:

方法一:双击打开Unity,开始面板中可以新建项目,如下图所示,点击New:

输入工程名,选择工程文件的存放位置,以及游戏模式(3D/2D),点击Create project,完成工程的创建。

方法二:点击File->New Project,新建完成的后,当前打开的工程会自动关闭。

创建完成后的界面如下所示:

页面的布局可以根据个人喜好自行设置,设置方法为:Window->Layouts,或者通过右上角的下拉列表选择,下拉列表显示的为当前的布局方式,里面有多种方式可供选择,可以尝试一下。

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

在新建项目之后,Unity会建立一个默认名为Scene的场景,如果要新建一个场景,需要先保存当前场景,然后点击File->New Scene新建场景;如果当前场景为默认的Scene场景,并且场景没有做任何修改,那么点击File->New Scene时,并不会重新建立一个场景。Unity中所有的游戏资源文件都保存在Assets文件夹下面,为了便于资源管理,我们需要对资源进行分类,这一点对于游戏资源很多的情况有很好的帮助。首先我们建立一个Scenes文件夹来保存所有的场景文件,创建方法有三种,具体步骤如下:

方法一:点击菜单栏的Assets->Create->Folder,命名为Scenes

方法二:右键点击Project视图中的Assets->Create->Folder,命名为Scenes

方法三:直接在项目目录下的Assets文件夹下新建一个文件夹,命名为Scenes,Unity会自动导入文件夹到工程中

如果要对新建的文件夹重命名,可以使用鼠标左键点一下文件夹,然后再点一下(注意:不是双击),输入新的文件名即可。

保存当前场景可以使用快捷键Ctrl+S或者点击File->Save Scenes,注意场景保存的位置一定要在Scenes文件夹下:

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

(一)、添加游戏对象--平台(Plane)

保存完场景后,我们就可以在场景中添加一下我们需要的对象了,我们需要添加的第一个游戏对象就是游戏运行的平台,这里我们使用Unity自带的Plane对象,添加一个对象的方法有3中,具体描述如下:

第一种方法:通过点击菜单栏的GameObject->3D Object->Plane

第二种方法:通过Hierarchy视图下面的Create下拉列表来创建,点击Create->3D Object->Plane

第三种方法:通过在Hierarchy视图中点击右键来创建,右键->3D Object->Plane

创建游戏对象之后,我们可以给它重命名一个有意义的名字来方便理解,这里我们把Plane重命名为Ground,重命名的方法有两种:

第一种方法:在Hierarchy视图中点击一下游戏对象Plane,然后再点击一下(注意:不是双击),输入新名字即可

第二种方法:右键点击游戏对象Plane,选择Rename,输入新名字即可

名字修改完成后,我们还需要做一个很重要的事情(官方强力推荐),我们把平台的Transform属性给重置一下,我们在Inspector视图中找到Transform组件,然后点击它右上角的小齿轮,选择Reset选项,如下图:

Tips:这个重置操作,官方是建议每次我们添加新的GameObject后最好都做一次,好的习惯我们尽早培养

平台添加成功后,我们可以对其属性进行一些调整,例如我们调整一下平台的大小,将目光锁定到Scene视图,我们可以在其中可直观的来修改平台的属性,这里有3个很实用的快捷键可以使用:

W:切换到移动模式,该模式下我们可以任意拖动平台,改变它的位置

E:切换到旋转模式,该模式我们可以任意旋转平台,改变它的角度

R:切换到缩放模式,该模式下我们可以任意缩放平台,改变它的大小

当然我们也可以直接在Transform里面直接输入想要的数值,在本例中,我们把平台的Scale X和Z的数值设置为2

Tips:选中一个GameObject,然后点击F快捷键,可以在Scene窗口将摄像机对准你选中的GameObject,方便你快速定位

(二)、添加游戏主角--球体(Sphere)

有了平台后,制作Roll-a-Ball游戏我还需要一个球体,我们可以通过方向键来控制球体移动,添加球体的方式,和上面添加平台的方式一样,只不过我们选择的是Sphere对象。球体对象创建成功后,我们最先要做什么呢?没错,就是官方推荐的做法,我们把球体的Transform属性重置,然后给他起一个好的名字,这里我们将其命名为Player,因为在这个游戏里面,这个球就代表这我们玩家。

Tips:重置Transform重命名这两个动作,我们尽量养成好习惯,在创建新的GameObject后,做这两个标准化动作

然后我们选中球体,通过F快捷键,定位到球体,我们会发现此时球有一个半是陷入在平台中的,不要紧,我们通过调节他的Position的Y值为0.5,让它正好处于平台上:

四、如何添加灯光(Light)

新版中,每个新建的项目,都会自动带一个平行光(Directional Light),所以这里我们就不用再添加灯光了,直接修改平行光的属性就可以了。
前面在讲场景文件保存的时候,就提到的好的资源分类可以帮助我们更好的管理游戏资源,这里我们对于GameObject的管理也是一样的,而在GameObject中,我们没有文件夹,所以我们使用一个空的GameObject(Empty)来代替文件夹的作用:

(1)、首先创建一个空的游戏对象,GameObject->Create Empty

(2)、然后将其的Transform重置

(3)、然后将其名称修改为Lighting

(4)、最后我们把Directional Light拖入到Lighting

这样我们就相当于把Lighting当成一个文件夹,把所有的灯光对象放到这个里面,便于管理。之后,我们为了让球和阴影有个明显的区分,我们在增加一个新的光源,用来照射在球体上,我们创建一个新的平行光(Directional Light),这样我们就有了两个名叫Directional Light的灯光,这样不便于区分,于是我们修改一下灯光的名字:

(1)、首先我们将系统默认建立的Directional Light重命名为Main Light

(2)、然后将我们刚刚新建的灯光改名为Fill Light

(3)、然后把Fill Light也拖入到Lighting下面(或者我们直接在Lighting上右击->Light->Directional Light,这样不需要拖拽操作新建对象就已经在Lighting下面了)

然后我们选中Fill Light,首先我们将其的灯光颜色设置为红色,这样便于和Main Light区分开来,然后将它的Rotation属性分别调整为-33,-135,180:

这样修改后,我们就可以看到球体上一层红色的光泽。

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

有了平台,有了球体,有了灯光,下一步我们就应该让球体可以动起来了。Unity上手很简单的一个原因,就是他的做法非常符合我们平时生活的逻辑,比如我们这里想让球体动起来,那么按照我们正常的想法,我们要做的事情就是告诉球体,让他动起来,那么转换成Unity的实现方法,就是给球体添加一个脚本组件,然后在脚本组件里面告诉他怎么动,下面我们来看看具体的操作:

(一)、给球体添加刚体(Rigidbody)

刚体可以给球体添加物理效果,让他可以检测物理碰撞,便于我们后面实现拾取物体和碰撞墙面。给球体添加刚体有两种方法:

(1)、通过菜单栏的Component->Physics->Rigidbody添加

(2)、通过Inspector视图底部的Add Component按钮添加

(二)、给球体添加脚本(Script)

 首先我们要再提一下开始说到的资源管理思想,为了便于我们管理游戏的资源,所以我们会创建一个文件夹,来专门存放所有的脚本文件:

要想给球体或者说任何一个GameObject添加一个脚本,我们首先选中GameObject,这里我们选中球体也就是我们的Player,然后在Inspector窗口中点击Add Component按钮,在弹出的菜单中选着New Script

之后会进入脚本名称和语言类型选择,这里我们将脚本命名为PlayerController,然后语言选择C#(C Sharp):

点击Create and Add后,我们就成功给球体添加一个脚本组件,然后我们点击脚本组件右上角的小齿轮按钮,在弹出来的菜单中选择Edit Script便可打开脚本编辑器了:

(三)、编辑脚本

我们可以看到,里面有两个方法,Start和Update,在本例中,我们再添加一个FixedUpdate的方法,该方法只在计算有关物理效果时调用,然后代码如下:

在上图中有几点需要说明:

(1)、第一个红框中的speed,公有类型的变量可以在Inspector编辑器中显示并进行修改

(2)、第一个红框中的rg,私有类型的变量不会在Inspector视图中显示

(3)、第二个红框中我们可以在Start()函数中为GameObject对象进行初始化,这样可以提高代码的执行效率

(4)、第三个红框中Input、Vector3、AddForce和Time.deltaTime,可以从Unity用户手册中查看相应的用法

Tips:在上述先添加刚体组件再添加脚本组件的过程中,如果先添加了Script脚本组件,再添加Rigidbody刚体组件,那么Script脚本中的private Rigidbody rg会提示Player中没有Rigidbody组件,这个时候需要把Rigidbody组件拖动到脚本组件上方(或者把Inspector视图中的脚本删除,先添加Rigidbody组件,再绑定Script脚本)。

在本例中,我们可以将Speed数值设置为500,这是一个比较合理的数值,做完这些之后,我们就可以运行游戏看看效果了!

 
 

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

  1. 对《[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(十二) 角色移动》的一些笔记和个人补充,解决角色在地形上移动时穿透问题。

    这里素材全是网上找的. 教程看这里: [Unity官方实例教程 秘密行动] Unity官方教程<秘密行动>(九) 角色初始设定 一.模型设置: 1.首先设置模型的动作无限循环. 不设置的话 ...

  2. 源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展

    教程来源于:Unity官方实例教程 Space Shooter(一)-(五)       http://www.jianshu.com/p/8cc3a2109d3b 一.经验总结 教程中步骤清晰,并且 ...

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

    由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(一) 章节列表: 一.创建小行星Prefab 二.创建敌机和 ...

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

    由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(二) 章节列表: 一.从Asset Store中下载资源并导 ...

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

    声明: 本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/97b630a23234 上一节Unity-2017.2官方实例教程Roll ...

  6. Unity官方实例教程 Roll-a-Ball

    与unity的transform组件相处的挺久了,最近项目不太忙,决定好好打下unity的基础.那么从Roll-a-Ball这个简单游戏开始吧! 1.先创建一个球体游戏对象,改名为Player,tra ...

  7. 学习unity的第一个小游戏(Roll the ball)的笔记

    1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...

  8. 学习笔记(一)--->《Java 8编程官方参考教程(第9版).pdf》:第一章到六章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.违者本人不负法律责任.违法者自负一切法律责任. ...

  9. jQuery官方基础教程笔记(转载)

    本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...

随机推荐

  1. python 中给文件加锁——fcntl模块

    如果没有fcntl模块则用 sudo pip install fcntl安装 模块简单说明: 打开文件,不存在则创建之 f = open('./test','w') fcntl.flock(f,fcn ...

  2. StringBuilder作用

    String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然 ...

  3. Centos 6.X noVNC+websockify 实现webvnc

    文章参考:https://github.com/kanaka/noVNC http://www.cnblogs.com/yanghuahui/p/3574388.html 工作原理: noVNC 可以 ...

  4. SQL Server 存储过程的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  5. AOS应用基础平台-模块开发流程

    AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...

  6. python 基础 9.3 mysql 数据操作

    #/usr/bin/python #coding=utf-8 #@Time   :2017/11/21 0:20 #@Auther :liuzhenchuan #@File   :mysql 数据操作 ...

  7. EasyPlayerPro Windows播放器实时流进行本地缓冲区即时回放功能实现

    背景描述 参照国内视频监控行业监控软件,实现当前视频的即时回放功能,例如: 监控人员发现刚刚的某个视频点有可疑,就像录像回放一样,想倒回去看一下,但又不想切换到录像回放界面, 此处就体现即时回放的价值 ...

  8. EasyDSS流媒体解决方案之多方式虚拟直播方法

    EasyDSS_Solution虚拟直播 EasyDSS_Solution虚拟直播,是EasyDSS流媒体解决方案提供的虚拟直播方案.可以通过三种方式创建虚拟直播. (1)点播的视频文件: (2)本地 ...

  9. 我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器

    现象 最近团队在做EasyDSS RTMP流媒体服务器开发的过程中,遇到了一个关于延时累积的问题,先大概描述一下过程: 在EasyRTMP Android进行长时间的RTMP推流压力测试,在EasyD ...

  10. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...