声明:
本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/6e4b0435e30e
文中章节列表如下所示:
一、如何创建一个新项目(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组件,这个时候需要先把Inspector视图中的脚本删除,先添加Rigidbody组件,再绑定Script脚本。
在本例中,我们可以将Speed数值设置为500,这是一个比较合理的数值,做完这些之后,我们就可以运行游戏看看效果了!