Unity3D ——强大的跨平台3D游戏开发工具教程


http://unity3d.9ria.com/?p=22

众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。在现有的版本中,其强大的游戏制作功能已经达到让人瞠目结舌的地步。尤其是它在3.0版本里面制作的那款第一人称战争游戏,画质效果丝毫不逊色于当下十分流行的《穿越火线》、《战地之王》等主流第一人称射击游戏。下图为Demo中的显示效果:
1.JPG

看到如此绚丽的效果,让我马上走进精彩的Unity3D世界吧!首先要下载Unity3D,在官网上就可以完成。
Unity3D的官方网站:http://unity3d.com
Unity3D的下载地址:http://unity3d.com/unity/download/
下载好之后,必须要到官方网站上注册一个邮箱,才能获得30天的试用时间。试用后如果您对这款软件满意,还可以在购买后继续使用。当然,如果您购买了Pro版本的Unity3D,将会获得更多的功能。
第一章Unity3D的基本界面介绍

 

Unity3D的基本界面非常简单,几个窗口就可以实现几乎全部的编辑功能。主界面如图1.1所示:
2.JPG

场景面板
:该面板为Unity3D的编辑面板;您可以将您所有的模型、灯光、以及其他材质对象拖放到当前场景中。构建游戏中所能呈现的景象。
动画面板:与场景面板不同,该面板是用来渲染场景面板中的景象的。该面板不能用作编辑,但却可以呈现完整的动画效果。显示的内容取决于场景摄像机的设置。
层次清单栏:该面板主要功能是显示放在场景面板中的所有的物体对象。
项目文件栏:该面板主要功能是显示该项目文件中的所有资源列表。除了模型、材质、字体等,还包括该项目的各个场景文件。
对象属性栏:该面板栏会呈现出任何对象的固有属性,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等等。
场景调整工具:可以改变您在编辑过程中的场景视角、物体世界坐标和本地坐标的更换、物体的法线中心的位置,以及物体在场景中的坐标位置,缩放大小等等。

菜单栏:接下来我重点介绍一下菜单栏。

菜单栏中包含有八个菜单选项:分别是File【文件】、Edit【编辑】、Assets【资源】、GameObject【游戏对象】、Component【组件】、Terrain【地形】、Window【窗口】、Help【帮助】。

每个菜单选项又有自己的子菜单,总结如下:

1、File【文件】

3.JPG

 

名称
说明
New Scene 创建新的场景。就像是游戏中的一个一个的场景一样,Unity3D为用户提供了方便的场景管理,用户可以随心所欲的创建出自己想要的场景。然后再把每个场景链接起来组成一个完成的游戏。

Open Scene 打开一个已经创建的场景
Save Scene 保存当前场景
Save Scene as 当前场景另存为
New Project 新建一个新的项目工程。用户想要制作出自己的游戏,第一步就是创建一个属于这个游戏的工程,这个工程是所有元素的基础。有了工程之后,用户就可以在这个工程里面添加自己的场景。
Open Project 打开一个已经创建的工程
Save Project 保存当前项目
Build Setting 项目的编译设置。在编译设置选项里面,用户可以选择游戏所在的平台及对工程中的各个场景之间的管理。可以添加当前的场景加入到工程的编译队列当中。其中的Player Settings选项中可以设置程序的图标,分辨率,启动画面等。
Build & Run 编译并运行项目
Exit 退出Unity3D

 

2、Edit【编辑】

4.JPG

名称
说明
Undo 撤销上一步操作
Redo 重复上一步动作
Cut 剪切
Copy 复制
Paste 粘贴
Duplicate 复制并粘贴
Delete 删除
Frame Selected 选择一个物体后,使用此功能可以把视角调到观察这个选中的物体上
Find 在资源区可以按资源的名称来查找
Select All 可以选中所有资源
Preferences 选项设置。对Unity3D的一些基本设置,如:选用外部的脚本编辑,皮肤,各种颜色的设置。以及一些用户基本的快捷键的设置。
Play 编译并在Unity3D中运行程序
Pause 停止程序
Step 单步执行程序
Load Selection 载入所选
Save Selection 保存所选
Project Settings 项 目设置。其中包括输入设置,标签设置(对场景中的元素设置不同类型的标签,方便场景的管理),音频设置,运行的时间的设置,用户设置,物理设置(包括重 力,弹力,摩擦力等),品质设置(这个比较重要,用户在这个选项里面可以设置工程默认的渲染品质),网络管理,编辑器管理等
Render Settings 渲染设置。如果觉得整体画面的色彩质量不尽如人意,可在此处进行调节
Graphics Emulation 图形仿真。主要是配合一些图形加速器的处理
Network Emulation 网络仿真。可以选择相应的网络类型进行仿真
Project Settings 项目设置。其中包括输入设置,标签设置,音频设置,运行的时间的设置,用户设置,物理设置,品质设置,网络管理,编辑器管理等。
Snap Settings 临时环境,或理解为快照设置。

 

3、Assets【资源】

5.JPG

名称
说明
Reimport 重新导入资源
Create 创建功能。可以用来创建各种脚本,动画,材质,字体,贴图,物理材质,GUI皮肤等
Show In Explorer 打开资源所在的目录位置
Open 打开选中文件
Delete 删除选中的资源文件
Import New Asset 导入新的资源
Refresh 刷新,用于导入资源包之后
Import Package 导入资源包。当创建项目工程的时候,有些资源包没有导入进来,在开发过程中有需要使用,这时可以用到导入资源包的功能
Export Package 到处资源包
Select Dependencies 选择依赖项
Reimport 全部重新导入
Sync MonoDevelop Project 同步开发项目

 

4、GameObject【游戏对象】

6.JPG

名称
说明
Create Empty 创建一个空的游戏对象。可以对这个空的对象添加各种组件,即各种属性。在Component里面会讲到
Create Other 创建其他类型的游戏对象。这里面包括了很多内容,基本上囊括了Unity3D所支持的所有对象。其中有粒子系统,摄像机,界面文字,界面贴图,3D的文字效果,点光源,聚光灯,平行光,长方体,球,包囊,圆柱体,平面,表面,音频混音区域,树,玩偶,风域等
Center On Children 这个功能是作用在父节点上的,即把父节点的位置移动到子节点的中心位置
Make Parent 选中多个物体后,点击这个功能可以把选中的物体组成父子关系,其中在层级视图中最上面的那个为父节点,其他为这个节点的子节点
Apply Change To Prefab 应用变更为预置
Move To View 这个功能经常用到,把选中的物体移动到当前编辑视角的中心位置,这样就可以快速定位
Align With View 把选中的物体移动到当前编辑视角的中心位置,深度为0,即移动到和视角同一个平面上
Align View To Selected 把编辑视角移动到选中物体的中心位置


5、Component【组件】

7.JPG

名称

说明
Mesh 添加网格属性
Particles 粒子系统。能够造出很棒的流体效果
Physics 物理系统。可以使物体带有对应的物理属性
Audio 音频。可以创建声音源和声音的听者
Rendering 渲染
Miscellaneous 杂项
Scripts 脚本。Unity内置的一些功能很强大的脚本
Camera-Control 摄像机控制


6、Terrain【地形】

8.JPG

名称
说明

Creat Terrain 创建地形
Import Heightmap-Raw 导入高度图
Export Heightmap-Raw 到处高度图
Set Resolution 设置分辨率
Create Lightmap 创建光影图
Mass Place Trees 批量种植树
Flatten Heightmap 展平高度图
Refresh Tree And Detail Prototypes 刷新树及预置细节


7、Window【窗口】

9.JPG

名称
说明
Next Window 下个窗口
Previous Window 前一个窗口
Layouts 布局
Scene 场景窗口
Game 游戏窗口
Inspector 检视窗口,主要指各个对象的属性,也可称为属性面板
Hierarchy 层次窗口
Project 工程窗口
Animation 动画窗口。用于创建时间动画的面板

Profiler 探查窗口
Asset Server 源服务器
Console 控制台


8、Help【帮助】

10.JPG

名称

说明
About Unity 关于Unity
Enter Serial Number 输入序列号
Unity Manual Unity手册
Reference Manual 参考手册
Scripting Manual 脚本手册
Unity Forum Unity论坛
Welcome Screen 欢迎窗口
Release Notes 发行说明
Report a Problem 问题反馈

第二章 Unity3D的简单预览
每个Unity3D版本都会自带一个Demo源文件。在3.0的正式版中,自带的Demo就是网上展示的那款强大的射击游戏。在一般情况下,您只要第一次打开Unity3D v3.0就会看见自带的那个Demo项目文 件了。但如果Unity3D并没有打开这个项目文件,你也可以在Unity3D里面的“File”菜单下点击“Open Project”选项,在“C:\Documents and Settings\All Users\Documents\Unity Projects”这个路径下找到项目文件夹“Bootcamp Demo”,选择并打开它。打开项目之后,在舞台场景面板中依然什么都没有显示的话,请在Project【项目文件栏】双击场景文件1.JPG 。稍等片刻之后,该舞台场景的所有对象就可以导入到舞台场景之中。导入成功之后效果如图2.1所示:
2.JPG

点击一下中间的播放按钮 3.JPG 做一下测试(如果您的机器配置不是很高,可能等待的时间会稍长)。稍等片刻,您就可以在Game【动画面板】中看到一个正在运行的射击游戏了。
在这个游戏场景中,您会看到比其他主流游戏还要细腻逼真的画面效果,例如各个物体的实时阴影。如图2.2所示:
4.JPG
当然如果您的机器配置较高,您还可以点击“Esc”键来将游戏画质进一步调高。调节界面如图2.3所示:
5.JPG
下面我们来看下调整画面效果前后的游戏画面对比,如图2.4.1和图2.4.2所示:
6.JPG
7.JPG
我们很明显的就可以感觉到河水的效果以及场景阴影的效果都真实了许多。

第三章 在Unity3D中创建一个山势地形图
前面两章我们比较细致的对Unity3D的界面和表现效果等进行了说明与讲解。相信很多朋友在看过Unity3D如此强大的画面效果后都已经按耐不住想要自己动手操作了,接下来我们就尝试在Unity3D中创建一个山势地形图。
第一步:创建一个新项目。
打开Unity3D软件,它会自动载入上一次我们打开过的“Bootcamp Demo”项目文件。不用管它,在软件打开之后点击 未命名.JPG ——>未命名2.JPG ,在弹出的8.JPG 对话框中找到未命名3.JPG 输入创建项目的文件夹地址,或者点击后面的9.JPG 选择一个文件夹地址(注:已创建Unity3D项目的文件夹,不能再当作新创建项目的文件夹来使用,否则会因无法找到文件而报错),然后在10.JPG 中选择要导入的项目文件包,每个文件包都带有一些插件功能,由于我们第一次创建项目文件,所以我们将所有的复选框都打上勾。但这样会致使Unity3D在开始加载的时候速度偏慢,等以后我们大家对各个插件包的作用都熟悉了,在创建Unity3D项目文件的时候,我们只需要勾选需要使用到的插件包就可以了。选项面板如图3.1所示:
11.JPG

全部设置完成后,我们点击 12.JPG 创建项目。
第二步:创建地形。
在创建一个新项目后,我们会看见新项目的各个面板中,只有Project【项目文件栏】包含了 13.JPG14.JPG 两个文件夹,这两个文件夹里面装的就是在创建项目时导入项目文件包里的所有文件。除此之外,其他版面都是空空如也。不要着急,万丈高楼平地起,我们马上就利用文件包和系统功能来丰富各个版面的内容。首先我们点击菜单栏上的15.JPG ——>16.JPG ,创建一个带有地形属性的平面,如图3.2所示:
17.JPG
第三步:添加摄像机。
创建好地形后,我们会发现Game【动画面板】中依然没有任何画面。其实道理很简单,就像演唱会的实况直播一样。场景都搭建好了,演员也在舞台上表演,却没有架上摄像机,电视机前的观众怎么能够看到现场的画面呢?
接下来我们就创建一个摄像机。点击 20.JPG ——>18.JPG ——>19.JPG ,这样场景中就会创建一个摄像机,这是您就可以在Game【动画面板】中观看到摄像机所观察到的星象了。如图3.3所示:

21.JPG
第四步:调整地形大小。
系统创建的地形默认大小是2000*2000的面积,实际编辑的时候会显得很大,不方便操作,所以我们对创建的地形面积进行调整,以便我们后续的编辑。
点击菜单栏上的 78.JPG ——>22.JPG ,弹出23.JPG 面板来调节地面的大小。将24.JPG 后面的数字改成500.然后将25.JPG 后面的数字也改成500,设置好之后点击26.JPG 按钮将原来的地形改成500*500大小的面积。
第五步:给场景编辑材质。
在场景面板中选中刚才创建的地面对象 27.JPG ,如果您觉得场景中不是很方便选择所需要的对象,那么您还可以在Hierarchy【层次清单栏】选中您所需的对象,该栏中包含了所有场景面板中的物体对象。选中地面对象79.JPG 之后,我们会在Inspector【属性面板】中马上发现与之对应的属性,包含有:Position【坐标】、Rotation【旋转量】、Scale【缩放尺寸】,以及地面对象固有的28.JPG29.JPG 。如图3.4所示:

30.JPG
其中 31.JPG 这个像画笔一样的按钮,是用来改变地面材质的。我们点击它之后,可以在下面找到32.JPG 按钮,点击——>33.JPG 来到34.JPG 界面,如图3.5所示:
35.JPG
然后我们单击 36.JPG 后面的圆圈,就可以为地面添加您所喜欢的材质了。选好之后点击37.JPG 按钮来填入新材质。添加材质之后的地面如图3.6所示:

38.JPG
如果您觉得这个地形的材质过于简单,那么您可以继续点击 39.JPG ——>40.JPG ,来添加第二个材质,然后在41.JPG 中选择您想要的笔刷形状,如图3.7所示:
42.JPG
接着就可以在场景面板中刷出新材质的区域范围了。如图3.8所示:
43.JPG
第六步:制作山峰。
完成了地面材质的制作,接下来就可以制作山峰了。
点击 44.JPG 这三个按钮其中的一个,选择合适的笔刷,在地形图中可以刷出高山的形状,如图3.9所示:
45.JPG
如果觉得现在刷出来的山峰太高了,活着觉得某处的山有些多余,可以按住Shift键不放,用刚才选择的笔刷进行反向平刷即可。
第七步:种植草和树木。
接下来就可以给地形种植一些草和树木了。具体的种草按钮是 46.JPG ,种树的按钮是47.JPG 。草和树木的设置方法与地形材质的设置方法十分雷同,都是先点击48.JPG 按钮来添加您所需要的花草和树木,然后在场景面板中刷出您所需要的区域即可。如图3.10所示:

49.JPG
这里大家需要注意一点,Unity3D在编辑模式下为了节约资源,采取了资源剔除的方法。如果您在利用笔刷“种草”的过程中,没有看到您所“种”上去的草,这是您只需将画面拉近即可观察到草的效果了。如图3.11所示:
50.JPG
第八步:设置地形上的风速、阴影效果。
种上了草和树木,如果在游戏中运行时静止不动,会让人感觉很不自然,所以我们在地形中添加上风和阴影的效果,让草随风摆动,这样会变得更加逼真。
点击 80.JPG 按钮,来设置地形上的风速、阴影等效果。如图3.12所示:
52.JPG
第九步:添加光照效果。
地形相关的所有效果已经设置完毕了,但是我们发现在Game【动画面板】中的画面很暗,这是由于没有加入灯光的缘故。
点击 53.JPG ——>54.JPG ——>69.JPG ,来创建一个太阳光效果。如图3.13所示:
56.JPG

太阳光和太阳自身的位置关系并不大,只与自身的角度有关,这一点和我们日常生活中的太阳光是一致的。所以为了让场景变得更亮,我们就需要用到场景调整工具中的旋转按钮57.JPG 来对太阳光进行旋转。当然您也可以在属性面板中对它进行调节。根据我们生活的常识,当太阳光直射地面的时候,光线最强。调整之后的效果如图3.14所示:
58.JPG
怎么样,这时的Game【动画面板】中的画面是不是亮了许多?
第十步:摄像机观察设置。
为了让摄像机全方位的观察我们刚才所创建的场景,您可以在Project【项目文件栏】中找到 59.JPG60.JPG61.JPG 这三个脚本文件,并将它们依次拖放到场景中的摄像机上面。如图3.15所示:
62.JPG
如果您觉得在Project【项目文件栏】中的文件过多,不便于寻找,您还可以在Project【项目文件栏】上方的搜索框输入他们的名字来进行搜索。这 样很快就能找到对应的文件了。放置完成后,点击测试按钮,您就可以身临其境的在您刚才创建的Game【动画面板】中进行漫游了。用鼠标控制视角,用键盘的方向键控制行走。在漫游的过程中,您可以清晰的看到刚才创建的草随微风轻轻摆动。效果如图3.16所示:
63.JPG
第十一步:添加天空效果。
这时我们从Game【动画面板】中看到的天空是没有任何效果的,接下来我们给场景添加一个天空盒,使场景具有蓝天的效果。
选中场景中的摄像机对象,然后点选菜单栏中的 64.JPG ——>65.JPG ——>66.JPG ,为摄像机添加一个天空盒。添加成功之后,我们就能够在摄像机的属性面板中找到刚才添加的天空盒了。
接着我们去Project【项目文件栏】找到“Standard Assets”文件夹下的“Skyboxes”文件夹。这里面摆放了许多关于天空的材质球,您只需要选中一个您喜欢的天空材质球,并拖放给摄像机离的天空 盒【Skybox】的材质属性【Custom Skybox】,就可以让场景的天空布满这种材质效果。如图3.17和图3.18所示:

67.JPG

68.JPG
选中场景中的光照对象,然后在他的属性面板中找到“Flare”,并点选它后面的圆圈 70.JPG 。在它弹出的71.JPG 对话框中选中双击72.JPG 这种光照效果,这样就可以使得您在动画模式中清楚的看见太阳所在的位置。再运行一下动画,看看效果。
第十二步:添加光照阴影效果。
细心的朋友一定会发现,现在场景中的树木等物体是没有阴影的,这很不自然。所以为了让场景更加的逼真,我们还可以为场景添加光照阴影效果。
具体做法如下:选中光照对象,在它的属性面板中找到 74.JPG ,它默认的是75.JPG (没有阴影),您可以将它改成“Soft Shadows”【软渲染阴影】或者是“Hard Shadows”【硬件渲染阴影】。“Soft Shadows”【软渲染阴影】以消耗CPU的计算为代价来产生阴影效果,这种模式运行速度较慢,但对于机器配置比较落后的使用者是唯一的选择。 “Hard Shadows”【硬件渲染阴影】可利用新一代GPU的显卡加速功能来为游戏进行阴影效果的渲染处理,其运行速度比较快,渲染效果也比较理想。但无论您选 择哪一个选项,动画场景的物体都会相对于阳光长生阴影效果。如图3.19所示:
76.JPG
第十三步:保存项目。
所有的场景效果已经调试完毕后,按下Ctrl+S来保存场景文件,取名叫做“text”以便日后调用。如果保存成功,您会在您项目的Project【项目文件栏】中看到一个这样的文件  


第四章 为地形添加水源、水流以及水下的模糊效果
制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富。
第一步:添加水面
由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它就可以作为一个放置湖水的地方。如果您上次的创作并没有这样的地形,那么请您重新创建一个山势地形图,就当作自己的一次练习吧。
在场景面板中点击Y方向的绿色箭头 1.JPG ,切换到顶视图,这样可以便于我们很快的找到洼地所在的地方。如图4.1所示:
2.JPG
图4.1
然后用鼠标滚轮迅速的推进观测距离。如图4.2所示:
3.JPG
图4.2
接着再到Project【项目文件栏】找到“Standard Assets”文件夹下的 4.JPG (仅限专业版使用,如果您使用的版本是非专业版本,请转到5.JPG )文件夹中,拖拽一个6.JPG 【白天光照效果的水模型】到洼地的中央,并利用场景调整工具中的缩放工具7.JPG ,将水模型调整到合适的大小。如图4.3所示:

8.JPG
图4.3
紧接着我们再点击场景面板中右上角的白色小方块 9.JPG ,将视角切换到透视图。然后利用场景调整工具10.JPG ,将水模型调整到合适的高度。如图4.4所示:
11.JPG
图4.4
这时您只需要在播放时,将摄像机移动到洼地这个地方就可以看见湖水的效果了。
第二步:添加瀑布。
现在看来效果略显单调,既然是山中泉水我们还得有一些瀑布和溅起的水花。为了节约查找的时间,我们直接在Project【项目文件栏】上方的搜索框输入字符“water f”,这样就可以查处如图所示的材质和模型。如图4.5所示:
12.JPG
图4.5
在这里面, 13.JPG 是一个喷泉模型,14.JPG 是一个水面的飞溅模型,15.JPG 是一个瀑布模型。我们先拖入一个16.JPG 到洼地,然后利用场景调整工具来调整它的位置和角度。如图4.6所示:

17.JPG
图4.6
这时的瀑布略显小了一些,我们可以先选中它,然后到它的属性面板里面去调整成您想要的效果。如图4.7所示:
18.JPG
图4.7
第三步:添加水面飞溅模型。
接下来我们会看到瀑布落到水面是没有水花飞溅的效果的,这不合常理。于是我们在瀑布下的水面上方放置一个水面飞溅模型 19.JPG 。由于它的噶偶一定要和水面高度一致,所以我们先点选水平面,看看它的Y轴坐标,然后复制到20.JPG 属性面板中同样的位置,以确保它是伏在水面上的。紧接着再到它的属性面板中调整它的属性,让模型效果调整成您想要得到的效果。如图4.8所示:
21.JPG
图4.8
第四步:添加水下模糊效果。
我们运行一下游戏 ,然后将镜头移动到泉水的水面下。如图4.9所示:
23.JPG
图4.9
大家会发现,水下的视觉和在地面上的视觉效果是完全一样的。这和我们平时的生活现状是不相符的,所以我们还得做一下相应的调整。首先点击 24.JPG ——>25.JPG ——>26.JPG ,创建一个立方体,并运用场景调整工具将它调整到整个水洼的实体部分。(注:运用其他形体也可以,其主要是用来覆盖水洼的实体部分,以用来和摄像机做碰撞检测,让摄像机的镜头变得模糊。)如图4.10所示:

123.JPG
图4.10
接着,确保您创建的这个cube是被选中状态,到它的属性面板中,将“Box Collider”卷展栏中的“Is Trigger”复选框打上勾(如果这里不打勾,这个cube将作为一个实物,当摄像机撞上它时,就像撞上墙一样,无法穿过。)如图4.11所示:
28.JPG
图4.11
然后再将“Mesh Renderer”卷展栏下的所有复选框全部勾掉,使这个立方体只作为一个形体存在,而不让它在场景中作出任何的显示渲染。如图4.12所示:
29.JPG
图4.12
接着在属性面板的最上方将它的名字由“Cube”改为“WaterColler” 30.JPG ,再选中31.JPG 的下拉框 中新添加一个“WaterColler”的标签分类。然后将这个“WaterColler”水洼碰撞体的Tag也改成“WaterColler”。
然后我们在菜单栏中选中 32.JPG ——>33.JPG ——>34.JPG ,新添加一个JS脚本。到Project【项目文件栏】找到刚才新建的JS脚本35.JPG ,按下F2键更改它的名字为“UnderWatereffect”,并双击编辑它,输入代码如图4.13所示:

36.JPG
图4.13
输入完毕,按Ctrl+S保存代码并关闭退出。然后将代码拖拽给摄像机使用。重新运行一下游戏,将摄像机移动到水下,就可以看到一片模糊的景象了。如图4.14所示:
37.JPG
图4.14
第五章 Unity3D中脚本的简单概述
和其他的3D软件一样,Unity3D作为一个类播放器的3D集成软件,具有良好的时间层级关系。比如Start()里面的语言,总是在播放器初始化时执行一次,而后就不再执行。例如下面用JS写的一个例子。在菜单栏上选中38.JPG ——>39.JPG ——>40.JPG ,将下面这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象。
41.JPG
您就会在播放器刚开始播放的时候,在左下角的控制台面板中看到 42.JPG 这句话,证明您的Game播放器已经开始工作了。如图5.1所示:

43.JPG
图5.1
(注:这个控制台买那般以后在大家使用的时候会经常用到它,因为它可以用作您代码片段的调试,以及您程序出错了的提示框,详细的提示您出错的原因所在。)
当然有了初始化函数,就一定会有刷帧函数Update(),该函数内所有的代码会在播放器每播放一帧时执行。例如下面用JS写的一个例子,在菜单栏上选中 未命名.JPG ——>未命名2.JPG ——>未命名3.JPG ,输入如下代码:
44.JPG
该代码会在播放器每播放一帧的时候,显示游戏开始到现在所消耗的时间值。
Unity3D中有着非常强大的接口处理功能,您可以在代码中为对象制定任意一个空接口用于和对应类型的对象进行交互,例如下面用JS写的一个例子,在菜单栏上选中 未命名.JPG ——>未命名2.JPG ——>未命名3.JPG ,输入如下代码:

45.JPG
该代码为对象添加了一个在Z轴方向上的初始速度,如果在没有其他外力的作用下,物体将一直沿着Z轴方向以5的速度运动。并且当您将这段代码拖拽给一个物体对象后,它的这个初始速度可以作为一个接口在它的属性面板中进行修改。如图5.2所示:
46.JPG
图5.2
除了数字作为接口外,接口还可以是对象,例如下面用JS写的一个例子,在菜单栏上选中 未命名.JPG ——>未命名2.JPG ——>未命名3.JPG ,输入如下代码:
47.JPG
您可以将这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象,因为它在这里定义了一个Transform类接口对象cubeGO,所以它几乎与拖拽的对象无关。拖拽成功之后来到该物体的属性面板中,您可以看到这样一个属性卷展栏48.JPG ,cubeGO的后面有个很明显未定义对象填写栏49.JPG ,然后我们把想要使之运动的物体拖拽到这个上面来,当我们运行游戏时,只要按下“G”键就可以看到被拖拽的物体作为“cubeGO”的指代对象,朝着Z轴方向运动了。


第六章 Unity3D中的C#Script编程的注意事项
也许您在学习Unity3D之前,已经是一位C#的编程高手了。但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全部继承自MonoBehaviour。下面为一段C#Script的完整代码:
1.JPG
除此之外它不支持空间命名,但官方说他们很有可能会在以后的版本中支持这一功能。
在Unity3D中,JavaScript和C#Script的编程效果近乎一样。只是为了不同程序爱好者设立了不同的编程模式。并且JavaScript所编写的代码对象可以和C#Script编写的代码对象交叉使用,并不发生任何冲突。

第七章 修改MonoDevelop编辑器为Unity3D的默认编辑器
通常情况下Unity3D默认的编辑器都是“UniSciTE”,它用起来十分轻巧快捷,就像记事本一样。
但如果要开发一些大型的项目, 显然“UniSciTE”简单的功能就不足以支撑它的工作了。但如果您每次在编辑脚本的时候,都去用“MonoDevelop”一个个的打开,又会显得很 麻烦。所以我们就要在Unity3D中做一些设置,让“MonoDevelop”成为默认的脚本编辑器。具体的步骤是:在菜单栏中找到2.JPG ——>3.JPG ,在弹出的未命名.JPG 对话框中找到4.JPG 并将它后面的下拉框选中为5.JPG ,浏览到我们“MonoDevelop”可执行文件存放的地方。这个路径一般都和您的Unity3D文件夹在一起。
设置好之后,重新再Unity3D中点选脚本文件,就会发现已经能用“MonoDevelop”软件打开了,但一次打开的时候会稍显慢一点,因为“MonoDevelop”需要加载很多东西。
当然,如果您是一个C#和Visual Studio忠实的编程爱好者,您也可以用同样的方法来设置Visual Studio软件的路径,让Visual Studio成为您Unity3D脚本的默认编辑器。

第八章 向Unity3D中导入外部模型
Unity3D支持多种外部导入的模型格式,但它并不是对每一种外部模型的属性都支持。具体的支持参数,您可以对照如下列表:

种类
网络
材质
动画
骨骼
Maya的.mb和.mal格式




3D Studio Max的.maxl格式




Cheetah 3D的.jasl格式




Cinema 4D的.c4dl 2格式




Blender的.blendl格式




Carraral



COLLADA

 


Lightwavel



Autodesk FBX的.dae格式




XSI 5的.xl格式

 




SketchUp Prol



Wings 3Dl



3D Studio的.3ds格式

 





Wavefront的.obj格式

 

Drawing InterchangeFiles的.dxf格式



 

在下面的实例中,我们利用3D MAX来制作一个完整的动画,并导出FBX的格式给Unity3D使用。
第一步:创建新的工程文件。
创建一个名为“Turret”的项目文件夹。然后打开Unity3D软件,选择 6.JPG ——>7.JPG ,创建一个新工程项目,在项目路径中点击8.JPG 找到我们刚才创建的“Turret”文件夹,并点选我们需要导入的包文件,然后点击9.JPG 来创建一个新的工程文件。需要注意的是,以上步骤千万不能乱,因为Unity3D是无法以非空的文件夹作为工程文件夹来创建项目的。
在此为了节省时间,笔者直接使用刚才创建好的场景来进行示范。
第二步:制作一个炮塔模型。
打开3D MAX软件制作一个炮塔模型,并将制作好的模型保存在“Assets”【资源】文件夹下面。3D MAX中的模型样图如图8.1所示:
10.JPG
图8.1
第三步:将炮塔模型放入场景。
重新来到Unity3D的软件环境中,这时大家已经能在Project【项目文件栏】看到我们刚才用3D MAX导出的模型文件和材质贴图文件了。接着我们在地形场景中找到一个合适的位置,将我们的炮塔拖拽进去。如图8.2所示:
11.JPG

图8.2
但是我们发现,这样似乎太小了一点。在改变外部模型尺寸的时候,有一个技巧,您不必在场景中修改它。儿科一道该模型的属性面板中去修改它的“Scale Factor”大小。如图8.3所示:
12.JPG
图8.3
它的默认值都是0.01,我们在这里将它改为0.1,并在属性面板的最下方找到 13.JPG 按钮,点击它让模型尺寸在Unity3D中得到改变。如图8.4所示:
14.JPG
图8.4
怎么样,我们的炮台是不是雄壮了许多?但是,我们并不赞同这样的模型导入方法。因为根据官方的说法,他们建议您将做好的模型导出成为FBX格式的模型文件 给Unity3D使用。也许这样会使模型在Unity3D中的运行速度得以提高吧。所以说我们还是回到3D MAX的软件环境下面,将模型导出。
第四步:将炮塔模型导出。
在3D MAX中,点击File【文件】——>Export【导出】,将模型文件导出为FBX文件,保存到我们创建的文件夹中的“Assets”【资源】文 件夹下面。注意一下弹出的“FBX Export”面板,这里包含了模型动画、骨骼工具、材质等等一系列的导出设置。如果您没有在模型中添加这些东西,就需要将不必要的复选框勾选掉。
第五步:将炮塔模型再次放置到场景中。
回到Unity3D的软件环境,在Hierarchy【层次清单栏】中选中原先的炮塔模型,按下“Delete”键将其删除。然后在Project【项目 文件栏】中找到刚刚导入的FBX模型,点击选中,用前面修改模型尺寸的方法来修改FBX模型的尺寸。然后将其放置在场景中合适的位置上。于是从3D MAX中导出的模型就顺利的导入到Unity3D的场景中了。


第九章 图形用户界面类G.U.I
您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视角的改变而改变的。这也是由于游戏本身的要求而决定的。比如说英雄的生命值,聊天窗口的文字信息等等。这些不被改变的内容就被称作G.U.I。
下面我们一起在Unity3D中简单做两个G.U.I实例,来说明它的用法。我们在现有场景的基础上制作一个炮弹发射的游戏。想想一个炮弹发射的游戏都需 要那些元素?是不是应该在画面的一个角落显示炮弹填发的情况?就像大多数3D游戏那样,您的魔法值在使用后需要一定的回复时间。接下来我们制作一个弹药装 填的效果。
第一步:制作弹药装填图案。
用PhotoShop制作弹药的装填时间图示,并将它们全部保存为PNG格式文件到工程项目的“Assets”【资源】文件夹内。弹药装填图示如图9.1所示:
1.JPG
图9.1
第二步:导入图案。
回到Unity3D软件环境中,为了方便归类,我们在Project【项目文件栏】中右键——>“Create”——>“Folder”新建一个文件夹,并按F2将其更名为“ShortTime”,再将导入的五张图片拖入文件夹内。如图9.2所示:
2.JPG
图9.2
第三步:创建图标。
在菜单栏中选中 3.JPG ——>4.JPG ——>4.JPG ,创建一个G.U.I图标,这是大家会在Scene【场景面板】中看到一个默认Unity3D的图标,如图9.3所示:

4.JPG
图9.3
在Hierarchy【层次清单栏】选中它之后,来到它的属性面板中,点击Texture后面的 5.JPG 来改变它的图标为我们刚导入的弹药装填图标。再通过属性面板中其他属性值的更改,得到图标最终的显示大小和显示位置,如图9.4所示:
5.JPG
图9.4
第四步:创建文字说明。
在菜单栏中选中 6.JPG ——>6.JPG ——>7.JPG ,创建一个G.U.I文字在图标的旁边座位说明。其文字输入、文字大小、文字样式等等也同样在它的属性面板中调节。如图9.5所示:
7.JPG
图9.5

第十章 让Unity3D支持中文字体

在上一章里面,我们一起学习了 G.U.I图形和文字的使用方法。但是细心一点的朋友可能会发现,在“GUI Text”中输入中文是没有任何效果的。这是由于现在Unity3D还不支持中文的缘故。但是,这并不影响我们对中文作品的开发。Unity3D中可以将 任意的字体作为材质文件赋予“GUI Text”,其中就包括中文字体。
具体做法如下:
第一步:将您需要的中文字体拷贝到项目文件中的“Assets”【资源】文件夹内。
第二步:在菜单栏中选中 8.JPG ——>8.JPG ——>9.JPG ,创建一个G.U.I文字,然后在它的属性面板中找到“Font”点选它后面的10.JPG ,将它的字体类型给为您刚才拷贝进来的那个字体,接着在属性面板中找到“Text”后面的输入框输入您想要输入的中文内容。观察场景面板,得到如图10.1所示效果:
10.JPG
图10.1



第十一章 制作炮台的旋转
大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台。
第一步:给炮台的炮筒添加旋转函数。
给炮台的炮筒部分添加一个旋转函数,使得炮台随着鼠标在X方向上的移动而移动。在Project【项目文件栏】中右键——> 1.JPG ——>2.JPG 新建一个JS函数,并按F2将其更名为“TurretRotate”,然后输入如下代码。
3.JPG
点选场景面板中的炮塔,找到炮塔上半部分所对应的对象,如图11.1所示:
4.JPG
图11.1
接着将刚才的 5.JPG 文件拖拽给这个对象。
第二步:设置摄像机跟随。
选中摄像机对象“Camera”,点选菜单栏中的 6.JPG ——>7.JPG ——>8.JPG ,为摄像机添加一个平滑的跟随代码,但这里并没有设置跟随对象。
继续选中摄像机对象,在它的属性面板中找到“Smooth Follow(Script)”卷展栏下的“Target”,然后将炮台上半身对象拖拽给它。如图11.2所示:9.JPG

图11.2
第三步:运行游戏,观察效果。
点击测试按钮 10.JPG ,试着移动下鼠标看看炮塔的旋转效果。如图11.3所示:
11.JPG
图11.3
摄像机随着炮塔的旋转而旋转,而G.U.I图标和G.U.I文字一直在画面的左上角不动,效果很不错。
注:这里需要注意的问题一个是摄像机的动作容易发生冲突,所以在设置的时候,需要注意将不使用的摄像机动作关闭。还有一点是模型制作完成导出的时候,需要注意将模型的坐标轴设置好,否则在脚本执行的时候,会出现摄像机不能与炮口方向一致的情况。

第十二章 制作炮弹的射击和爆炸效果
制作完了炮台的旋转,接下来我们继续制作炮弹相关的效果。
第一步:创建炮弹。
点击菜单栏的 12.JPG ——>13.JPG ——>14.JPG ,创建一个球体模型,并利用场景调整工具将其调整到和炮口差不多的大小。如图12.1所示:
15.JPG

图12.1
第二步:给炮弹添加贴图。
找两张金属材质的贴图,第一张为基本RGB贴图,第二张为普通显示的贴图,如图12.2所示:
16.JPG
图12.2
这样做是为了一会在给物体赋予材质时,让它有立体的感觉。您也可以只给物体照一张贴图材质。找到想要的材质贴图之后,将它们拷贝到项目文件夹中的“Assets”【资源】文件夹内。
接下来选中刚才的球体模型,在它的属性面板中找到材质球下拉选项框。将他的渲染模式改为“Bumped Diffuse”,紧接着将深色的材质贴图拖放给第一个材质框,将浅色的材质贴图拖放给第二个材质框。如图12.3所示:
17.JPG
图12.3
于是我们就会得到一个带有材质效果的炮弹了。
第三步:设置炮弹的发射效果。
在菜单栏中点选 18.JPG ——>19.JPG ——>20.JPG ,创建一个预制类对象,并按下F2键将它的名字改为“Shot”,然后将球体模型拖入到预制对象中,并剔除场景面板中的炮弹模型。
但是这时的球体模型仅仅是在外观上有了炮弹的样子,我们还得让它具有炮弹一样的物体特性。接着在菜单栏中点选 21.JPG ——>22.JPG ——>23.JPG ,为炮弹添加一个刚体属性。
第四步:设置炮弹的发射起点。
在菜单栏中点选 24.JPG ——>25.JPG ,创建一个空对象放置在炮口,作为一会炮弹发射的起始点。按下F2将其更名为“FirePoint“。然后在Hierarchy【层次清单栏】中,把“FirePoint“拖拽到炮塔上半部分的旋转对象中去,这样可以使得它和炮塔一起旋转。
第五步:为炮弹创建发射函数。
在Project【项目文件栏】中右键——> 26.JPG ——>27.JPG 新建一个JS函数,并按F2将其更名为“Open Fire”,然后输入如下代码。

28.JPG
输入完毕之后,将该代码拖拽给Hierarchy【层次清单栏】中的发射对象“FirePoint“,然后我们会发现在属性面板中的“FirePoint “接口和”Bullet“接口对象为空。所以我们必须得把发射点对象“FirePoint“和炮弹对象”Shot“拖拽到两个对应的接口上。如图12.4 所示:
29.JPG
图12.4
第六步:添加火花效果。
接下来我们按下测试按钮 30.JPG 看看效果。大家会发现朝前发射的炮弹再碰到山体后,都被弹了起来。所以说此时我们制作的炮弹还只是一个球体,并不会爆炸。接下来我们还要继续作出炮弹的爆炸效果。
在Project【项目文件栏】的查找框中输入“Fireworks“关键字,将查找到的 31.JPG 拖拽到场景面板,您会看到一个动态的实时爆炸火花。如图12.5所示:
32.JPG
图12.5
接着确保该对象为选中状态,到它的属性面板中调节它的各个属性值,直到达到您想要的效果为止。如图12.6所示:
33.JPG
图12.6
接下来在菜单栏中点选 34.JPG ——>35.JPG ——>36.JPG ,创建一个预制类对象,并按下F2键将它的名字改为“BoomPrefab”,然后将这个爆炸火花拖拽到预制对象中去,并删除场景面板中的火花。
第七步:为炮弹创建爆炸效果。
添加一段JavaScript代码,取名叫做“Boom“,这段代码的主要作用是给炮弹添加一个碰撞检测。如果炮弹碰撞到任何物体,就让炮弹在场景中消失,并在炮弹碰撞消失的地点加载爆炸火花的预制对象。具体代码如下:

37.JPG
输入完毕之后保存该代码,并把这段代码拖拽给炮弹预制对象“Shot“。然后点选预制对象”Shot“,在它的属性面板中找到刚才拖拽给它的”Boom “卷展栏,再将爆炸火花预制对象”BoomPrefab“拖拽给它的接口”BoomFire“。运行游戏,看一下效果。如图12.7所示:
38.JPG
图12.7
第八步:设置爆炸效果的消失。
刚才一系列的设置之后,大家已经能够很明显的看到爆炸之后的火花效果,但它会一直在那里闪烁,并不会消失。这严重违背了现实生活的景象,所以我们还得为它加上一段时间限定消失代码。
继续创建JavaScript代码,更名为“desBoom“,具体代码见下:
39.JPG
输入完毕之后,将这段代码拖拽给爆炸火花预制对象“BoomPrefab“。再次运行程序,我们会发现火花在爆炸产生2秒后就自动消失了。
第九步:为爆炸效果添加音效。
完成了画面效果的制作,我们还需要给游戏添加上非常重要的一个元素——声音。其实这个过程非常简单,只需要在网络上搜寻一个您认为合适的声音,并将这段声 音文件添加入项目文件夹的“Assets“【资源】文件夹内。然后在Project【项目文件栏】中,将其拖拽给爆炸火花的预制对象 “BoomPrefab“,这样声音文件就可以和爆炸火花同时产生了。
如果您觉得声音需要做适当的调节,例如“是否在预制对象产生时播放?“,”声音是否循环播放“等这些问题。我们都可以在选中预制对象后,在它的属性面板中找到声音的调节卷展栏,对它一一进行调节。

以上就是这款强大的跨平台3D游戏开发工具Unity3D的基础入门教程了。相信大家看过之后多加练习,一定能够制作出非常优秀的3D游戏,也希望我的教程能够帮助大家较快的上手Unity3D,谢谢!


天地会Unity3D讨论群:

1群:175283762(已满)
2群:120543899





展开阅读全文

没有更多推荐了,返回首页