声明:

本文系转载,由于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. link标签的rel属性

    <link>标签定义了当前文档与 Web 集合中其他文档的关系.link 元素是一个空元素,它仅包含属性.此元素只能存在于 head 部分,不过它可出现任何次数.在 HTML 中,< ...

  2. ngui 输入事件处理

    NGUI不仅提供了图形接口,还提供了输入事件接口!事件接口是通过UICamera来实现的. Unity3d 为我们提供的原装的input尽管非常方便,但真正跨平台使用时(尤其是跨手机与Pc机时)仍然不 ...

  3. Java设计模式(九)责任链模式 命令模式

    (十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...

  4. MySQL数据库的常见操作(七)

    MySQL数据库的常见操作 1.创建数据库 2.创建重名的数据库以及如何查看警告信息 3.设置数据库的编码方式(默认为utf8) 4.修改和查看数据库的编码方式 5.删除数据库 6.6.删除已经删除了 ...

  5. 01 redis特点及安装使用

    一:redis的特点 ()redis是一个开源,BSD许可高级的key-value存储系统.可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务. 二:redis和memcached ...

  6. PowerBuilder -- 数据窗口

    获取数据窗口列数 ls_colnum= integer(this.Describe("DataWindow.Column.Count")) 获取数据窗口列名 ls_colName ...

  7. 【转】基于eclipse进行ndk开发的环境配置

    前述虽然我们在其他的博文中(如https://blog.csdn.net/ericbar/article/details/76602720),早就用到了ndk,但如果想在Android设备运行包含这些 ...

  8. Python中的staticmethod和classmethod

    谈谈Python中的staticmethod和classmethod 首先值得说明的是staticmethod和classmethod都是python中定义的装饰器,用的时候需要在前面加@ 即@sta ...

  9. 【题解】P4247 [清华集训]序列操作(线段树修改DP)

    [题解]P4247 [清华集训]序列操作(线段树修改DP) 一道神仙数据结构(DP)题. 题目大意 给定你一个序列,会区间加和区间变相反数,要你支持查询一段区间内任意选择\(c\)个数乘起来的和.对1 ...

  10. 我的Android进阶之旅------>Android实现音乐示波器、均衡器、重低音和音场功能

    本实例来自于<疯狂Android讲义>,要实现具体的功能,需要了解以下API: MediaPlayer  媒体播放器 Visualizer 频谱 Equalizer 均衡器 BassBoo ...