游戏开发论坛

 找回密码
 立即注册
搜索
查看: 20767|回复: 1

教程:如何使用Unity制作3D版iOS游戏(1)

[复制链接]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2013-2-23 15:34:24 | 显示全部楼层 |阅读模式
教程:如何使用Unity制作3D版iOS游戏(1)
教程:如何使用Unity制作3D版iOS游戏(2)

作者:Joshua Newnham

  Unity是最流行的iOS游戏开发工具,原因有很多,比如:

  发展迅速。用Unity做游戏比用你自己的3D引擎或低级3D框架快得多。

  可视的场景布局。Unity带有强大的3D场景编辑器,游戏很大一部分都可以用它完成——通常不需要写代码!

  跨平台。如果你的游戏是用Unity制做的,那么它就可以移植到iOS、Android、Windows、Mac和甚至网页!

  容易学习。Unity比OpenGL或低级框架更容易学习,这对新手特别有利!

  本系列文章将分为三个部分。如果你想学习得更多,不妨将三个部分都学习一下。(请点击此处查看第2部分

  本教程包含注释内容,你会学习到很多东西,毕竟本教程的游戏案例比《Heroic Cube》更复杂。

  注:游戏案例是由Unity 3D制作的,所以可能与使用Unity 4有稍许不同。

  我们可以开始了吗?

设计游戏

  无论是什么应用,在你开始写代码以前,你都应该先决定你要把它做成什么样子——以及为什么这么做。你必须考虑到你的目标受众,你的概念是什么及它为什么吸引受众,你的应用具有什么功能特性。

  我们来试试!

  在这个教程中,我们假设你的目标受众是年龄介于12-35岁的男性——假设有这么一位玩家玩家名叫Bryan,他是:

  *33岁的资深会计师
  *有一部iPhone
  *对运动有兴趣
  *是办公室白领,每天坐公共交通工具上下班,平均用时20分钟。
  *与大部分智能手机用户一样,Bryan经常在通勤时间段用iPhone作为娱乐工具,通常不放过任何一点空闲独自的时间,甚至有时候在吃饭时也要玩上一把,他的妻子因此很恼火!

  你的目标是针对Bryan这样的玩家制作一款游戏,供他在每天的几分钟空闲时间内玩。你的游戏应该非常简单(但是有趣),有且仅有一个容易学会的机制。这样,玩家在嘈杂混乱的环境,如通勤时段中才能很快上手这款游戏。

  因为你的目标受众是年龄介于12-35岁的男性,你的游戏主题最好与运动有关。手机休闲游戏的玩法长度通常是4-8分钟——包含载入和开始部分,完整的游戏环节持续5分钟。

  所以,你的游戏应该与一种简单而快速的运动有关。射击或者篮球怎么样?下图是一个篮球游戏的草图:

sketchfrom-raywenderlich.png
sketch(from raywenderlich)

  啊,我们已经有进展了!现在可以开始设计功能和相关组件了!

  机制/互动元素:

  目标:在一次游戏环节内,尽可能获得高分

  投球时,玩家的手指应该按在屏幕上;手指停留的时间越长,球越难投出。并且把球留住的时间太长就算犯规。

  特征:

  *视觉效果丰富,以吸引玩家眼球
  *简单的菜单(在游戏画面的上一层,带有开始游戏的选项)
  *仿真物理,允许球反弹

  玩家角色在球场上的移动会越来越快,从而增加游戏难度;但玩家会慢慢适应游戏节奏。

  游戏资源及其特征:

  *环境
  篮框
  响铃
  球场
  背景
  *计分栏
  *玩家角色
  停止动画
  投球动画
  移动动画

  好了,现在你已经有了游戏的基本设计,可以开始制作了!

  Unity 3D简介

  如果你已经有Unity了,那你大概可以跳过这一部分。

  如果没有,那么你就得先下载Unity。你可以在Unity的网站上下载免费试用版。运行安装程序,很快就可以用上Unity了。

  Unity对于非商业目的是免费的,但为了在你的项目中使用这个软件,你必须先注册——在第一次使用时你会看到“Register”按钮。一旦Unity启动,《AngryBots》的样本项目就会出现。

  我们要制作一个新项目,所以从主菜单中选择FileNew Project,你可以随时保存。现在不要急着选择要导入的程序包。

  当你第一次打开Unity(注册后),你会看到:

Unity-Welcome-Windowfrom-raywenderlich.png
Unity-Welcome-Window(from raywenderlich)

  注:罗列在这个界面中的介绍视频和手册是非常实用的资源,你学习完这个教程以后,不妨看一看——它们会让你更加了解Unity的功能。

  在你正式操作以前,先快速浏览一下Unity的用户界面,这是你制作所有Unity项目的控制中心!

  Unity界面

  我们先快速浏览一下Unity界面。如果你已经熟悉了,那么不妨跳过这一部分。

CorrectAnnotatedUnity3D-UI1from-raywenderlich.png
CorrectAnnotatedUnity3D-UI1(from raywenderlich)

  Unity的用户界面由五个独立的面板组成,各个面板都紧密相关,可以让你从不同的视角察看项目。

  第一个是Project panel(项目面板),你可以通过它概览项目,并快速获得游戏的所有资源。这里的“资源”是指游戏将使用到的所有材料,如脚本、材质、声音和数据文件等。

  注意,在这个面板中会出现某些文件夹名称,与特定的任务有关。例如,当使用“Gizmos”的图像元素时,就是设计时间图标,你必须将它们放在“Gizmos”文件夹下,这样Unity才能搜索到。

  第二个是Hierarchy panel(层级面板),显示的是当场场景中的所有资源。你可以通过它快速选择物品,而不必通过3D视图或执行多重选择。一个小技巧:聚焦某个资源,将鼠标悬浮于你想在场景面板中聚焦的物品上,然后按下“F”键。

  接下来是Camera panel(摄像面板)!它提供了场景的摄像机视点。注意右上角有三个按钮。Maximize on Play就是当你选择游戏时最大化窗口。当你准备优化游戏时,Stats非常管用,因为它显示了draw calls和其他有用的数值。Gizmos用于将Gizmos显示或隐藏在游戏场景中。

  位于摄像面板之上的是Scene panel(场景面板),这是你可视化设计游戏关卡的主要面板。如果你熟悉3D建模工具,那么你应该会使用得相当得心应手。否则,也别着急——Unity是非常直观又容易学会的软件。

  选择物品,包括摄像机,可以在窗口顶部的操作工具中执行。

Unity3D-Scene-Manipulation-Handlesfrom-raywenderlich.png
Unity3D-Scene-Manipulation-Handles(from raywenderlich)

  hand工具是用来移动场景的。translation工具会显示被选中物品的其他操作,如在场景中移动或转换物品。Rotation和scale可以用来旋或缩放被选中物品。

  注:你应该熟悉这些工作的快捷操作方式。非常容易记住:键盘上最前面的四个字母分别对应这四个工具:hand是Q、translation是W,Rotation是E,scale是R。不要忘记你的好朋友F是用来聚焦被选中物品的——你会经常用到F!

  关于scale的一个小提醒:最好不要手动缩放物品,除非你在观察它的视觉效果。通过导入选项缩放模型会更方便,而且效率更高。

  最后一个面板是Inspector panel(检查面板),可以借它访问被选中对象的所有公开可获得的属性。这是一个重要的概念,所以花点时间理解它的含意吧。

  你游戏中的所用元素都是从GameObject(游戏对象)继承来的。不同的Components(组件)(来自名为MonoBehaviour的组件)与各个游戏对象联系在一起。这些Components决定了GameObject在场景中的行为。

  这些Components可以通过Inspector panel看到,你可以在这个面板中调整它们的属性。Components各不相同,可以是从你写的简单脚本中产生的东西,也可以是摄像机、物理属性等。本质上,组件为你提供了一个模块化构建游戏元素的灵活方法。值得注意的是,所有GameObject都有Transform component——它决定了GameObject在3D空间中的位置。

  注:如果你熟悉iOS的开发,那就把你的GameObject当作NSObject。不是继承功能,而是将对象归为专门类别——使其具有不同的功能,但作为一个单元捆绑在一起。

  下图是Inspector panel的截图,其中摄像机被选中。

Unity3D-Inspector-Camerafrom-raywenderlich2.png
Unity3D-Inspector-Camera(from raywenderlich)

  这里的组件包括:Transform (所有游戏对象都有)、 GUILayer、Flare Layer和Audio Listener。这些都是什么?不要着急——我只是想让你看看一个对象具有的组件和设置。

  除了这些面板,通过Unity的工具栏还可以用到许多功能。你最感兴趣的两个东西应该是Game Object和Component选项。

  Game Object菜单中有一个物品列表,你可以添加到当前场景中。你可能有兴趣的下位菜单选项是Create Empty和Create Other -> GUI Texture。Create Empty就是将一个新的(空的)GameObject放到场景中。Create Other——GUITexture就是制作一个带有UGI材质组件的游戏对象,且当前选中的材质作为它的纹理,如果没有选中材质,软件就会默认。

  现在,你已经对Unity界面有一个大致的了解了。在下面一节中,你可以开始制作你的Unity场景了!

  游戏资源

  在这一节内容中,你将学习如何将资源导入Unity,Unity如何处理资源以及简要了解材料的含意及其在Unity中的作用。

  看看本教程在上文中列出的特征,你应该很清楚你需要什么资源。想象你的设计师已经给你制作了那些资源,如制作主菜单画面需要的图像和字体:

main-menu-UI-Mockupfrom-raywenderlich%E5%89%AF%E6%9C%AC.jpg
main-menu-UI-Mockup(from raywenderlich)

  在这里,玩家可以快速启动游戏并查看进度。注意,本教程不包含社交网络的执行。

  设计师还制作了主关卡的材质和3D模型,例如下图:

game-mockupfrom-raywenderlich1.png
game-mockup(from raywenderlich)

  设计师将所有资源打包成zip文件。解压文件后,你可以看到目标包含材质、字体、图像和模型,如下图:

Fontsfrom-raywenderlich1.png
Fonts(from raywenderlich)

  现在我们将一些资源导入项目中。在项目面板,点击Create(创建)按钮,然后选择Folder(文件夹)。制作出如下图所示的结构:

unity3d-folder-structurefrom-raywenderlich.png
unity3d-folder-structure(from raywenderlich)

  从GUI图像开始。将所有/NBNAssets/GUI folder的文件拖到/NothingButNet/GUI folder中。这些是你的GUI将使用到的图像,如图标和喷溅效果。

  Unity将自动检测你导入的资源类型,并添加默认属性。在本教程的案例中,Unity将你导入的.png文件作为3D模型材质,并压缩。当将其作为GUI材质渲染时,会降低图像质量,这是你不想看到的结果!

  你必须浏览各张图片,设置类型为GUI。做法是选择选项,从Inspector panel中查看,从Texture type下拉菜单中选择GUI选项(如下图所示)。

unity3d-importing-GUI-assetsfrom-raywenderlich.png
unity3d-importing-GUI-assets(from raywenderlich)

  对所有图像重复以上操作。

  下一步,导入模型的材质。从/NBNAssets/Textures folder中将.png文件拖到/NothingButNet/Textures folder中。因为这些是3D模型的材质,所以你不必修改默认设置 。

  现在导入字体。将.ttf文件从/NBNAssets/Fonts folder拉到/NothingButNet/Fonts folder中。

  最后,导入模型。将.fbx文件从/NBNAssets/Models folder拉到/NothingButNet/Models folder中。

  注:本教程所用的模型是用开源免费3D制作工具Blender制作的,用FBX导出。Unity支持多种音频、图像和3D材料格式,除了FBX文件——想了解更多关于Unity支持的文件格式,请参看Unity的导入指南。

  添加模型后,你应该查看材质是否与模型正确对应。方法是,点击各个模型,从Inspect panel的Preview(预览窗口)查看。另外,点击模型,然后移动鼠标,可以旋转模型,以查看其他面。

unity3d-inspect-player-modelfrom-raywenderlich.png
unity3d-inspect-player-model(from raywenderlich)

  如果你的模型是灰色的,那么很可能是因为材料和材质之间的链接被破坏了。我将在下面一节内容中解释这些链接的运作和修复方法。

  材料和材质

  模型与Materials(材料)有关。Materials是一个指定的着色器(注:着色器就是图象通道中的一个小程序,与模型顶点的放置和模型栅格化到2D画面有关),决定了Unity如何渲染基于光照、法线映射和象素数据的图像。有些着色器可能是处理加强器,所以最好根据你的材料选择着色器。

  打开模型下面的Materials folder(材料文件夹)。你可以找到各个模型的材料。选择列表中的一个材料,将着色器从Diffuse变成Mobile/Diffuse。

  如果你的材质还没与材料建立链接,那么你会看到窗口中的空白灰点,这是图像本来应该在的地方(在右下方有一个Select按钮)。为了对应正确的材质,你可以点击Select按钮,选择材质,或简单地拖一个材质到这个点中。

  至于角色,材料应该如下图所示:

unity3d-inspecting-player-materialfrom-raywenderlich.png
unity3d-inspecting-player-material(from raywenderlich)

  你必须对HoopTex Material设置透明度。选择这个材料,然后选择Transparent/VertexLit Shader。

  最后还有一点事情要做。在3D建模工具之间,没有标准化的缩放,所以为了将模型调成适合的大小,你要选择各个模型并调整它们的大小介于0.01到1之间。如下图所示:

unity3d-player-import-settingsfrom-raywenderlich.png
unity3d-player-import-settings(from raywenderlich)

  最后,打开角色模型,你会发现一些子项元素,如下图所示:

unity3d-players-childrenfrom-raywenderlich.png
unity3d-players-children(from raywenderlich)

  根据你使用的3D建模工具,有些子项元素可能会有所不同。在Blender中,BPlayer和BPlayerSkeleton是对象,BPlayer(在BPlayerSkeleton之下)是mesh数据,显示的是角色的几何体,最后是动画帧,这个等到给角色画线时再详述。

  设置场景

  在这一节内容中,你将为游戏设置场景。你的目标是了解Unity场景环境、发现Unity提供的更多Components,最后完成你的游戏场景。

  在你设计场景以前,先从设计阶段考虑要求。摄像机应该稍微侧朝球场和角色,以便玩家可以看到其中一个篮框。

  你组合的场景应该类似于下图中的效果:

Setting-up-the-Scene-Scene-layoutfrom-raywenderlich.png
Setting-up-the-Scene-Scene-layout(from raywenderlich)

  然而,说得容易做得难!

  这是你第一次操作Unity中的场景、摄像机和层级面板。执行以下步骤:

  选择Hierarchy folder中的Main Camera(主摄像机),设置X=6.5,Y=7,Z=14,Y-rotation=-180

  将场景模型拖入Hierarchy panel中,设置X=0, Y=0, and Z=0。你应该看到它显示在摄像机窗口中!

  将玩家模型拖入Hierarchy panel中,设置Y-rotation=90。

  现在,你已经有了基本对象,试试用场景面板移动角色。选择角色,然后在场景中拖它;当选中角色后,屏幕右上方会出现X、Y、Z箭头,用它们移动角色。你还可以改变观察场景的视角,即使用位于Scene panel右上方的视角切换器。

  现在,你可以开始添加剩下的对象了——篮球和篮框。看看你是否能利用场景和Hierarchy panel将其放在正确的位置。如果你失败了,那么就将它们的位置返回中心(X=0, Y=0, Z=0)。

  在你操作时,你会发现无论你在Hierarchy中点击什么,都会出现在场景中。你还可以轻易地缩放场景视图中的对象——例如,双击角色可以将它置于镜头的中心。

Setting-up-the-Scene-scene-unfoldedfrom-raywenderlich.png
Setting-up-the-Scene-scene-unfolded(from raywenderlich)

Scenefrom-raywenderlich.png
Scene(from raywenderlich)

  如果它没有出现在中心,那就用鼠标滚轮来缩放,用鼠标拖窗口中的视图,或按下Alt/Option键,旋转,从另一个角度察看。

  注意,这些操作都不会影响对象的实际位置,只是帮助你得到更理想的视图。

  既然已经完成场景设置了,现在可以制作计分栏了。

  将计分栏与场景分离

  目前,计分栏还只是背景的一部分,但你必须把它做成独立的对象。所以你要在层级视图中将它从场景的子项中拖到层级的根项里。然后会出现下图的对话——点击Continue。

losing-prefabfrom-raywenderlich.png
losing prefab(from raywenderlich)

  注:GameObject可以有子项,并且这些子项还可以有自己的子项。GameObject的子项不直接继承父项的功能(除非明确脚本),而是使用它们的父级场景空间来放置它们自身。例如,如果父项沿着X轴移动,那么所有这个父项的子项也会如此移动。如果你带着篮球(你的子项)往前走,篮球也会跟着你往前移动。


  为了独立子项,使之不继承父项的translation、orientation和scale属性,可以将它拖出其所在父项的文件夹。

  之所以将计分栏独立出来,是为了给它添加一些3D Text(3D文本)对象,以显示得分和剩余时间。你不一定要这么做,这只是外观和结构上的一种设计选择。这么做(视觉上)有助于将其与场景的其他部分分离,给你一个制作prefab(预设件)的选择(稍后再说),如果你的游戏有多个关卡的话。

  3D Text对象就是,一个在3D环境中渲染文本的对象。

  把3D Text对象添加到场景中,方法是选择菜单GameObject -> Create Other -> 3D Text。这样一个叫作New Text的GameObject就被添加到场景中了。

  重命名这个3D Text对象为“Point(得分)”,然后把它拖进计分栏对象中。下一步,将计分栏字体与这个3D Text关联起来,请执行如下步骤:

  拖ProjectNothingButNetFontsScoreboard font到HierarchyScoreboardPointsText MeshFont属性。

  拖ProjectNothingButNetFontsScoreboardFont Material material to the HierarchyScoreboardPointsMesh RendererMaterialsElement 0属性。

  在3D文本的检查器中,设置默认文本为“0000”,右中对齐。然后使用场景面板来确定计分栏上的右侧的字体位置。注意,你可能得旋转文本,以便显示在右边——我的设置是X=0,Y=0,Z=2.8,RotationX=270, Y=180, Z=0。

  现在对Time(时间)文本做相同的操作,即用Cmd-D复制Point文本,然后放在下方。命名对象副本为“Time”,设置默认文本为“00:00”。

  你得到的结果应该接近下图:

unity3d-score-boardfrom-raywenderlich.png
unity3d-score-board(from raywenderlich)

Hierarchy-Pointsfrom-raywenderlich.png
Hierarchy-Points(from raywenderlich)

  光照


  你有没有注意到场景是黑的?那是因为你还没将灯光添加到场景中。那么我们开始点灯吧!

  注:添加光照时你应该考虑到几个问题。添加光照需要付出渲染的代价。如果你过去做过着色器程序,那么你应该理解支持动态光照的渲染需要付出额外的努力。各个光源都需要各自的渲染对象,以计算最后的光照效果,这取决于你使用的着色器/材料,有很高的计算成本。

  如果有可能的话,在渲染以前,将所有光照细节“烤”进对象的材质中。烤是一种渲染带静态光照效果的材质的方法,所以达到相同的视觉效果并不需要付出额外的计算成本。另外,使用场景的环境光来控制光照强度;方法是选择Edit -> Render设置面板。

  在你的简单场景中,你可以添加一个光源。选择GameObject -> Create Other -> Directional Light,添加一个新的方向光照游戏对象到场景中,这样就点亮场景了。

  如果要全面地讨论光照,恐怕就超出本教程的范围了,但可以简单地说一下方向光源。它影响整个场景,取决于光的方向,你可以通过旋转Directional Light GameObject(方向光照游戏对象)来调整它的方向。选择光源,然后用场景面板中的移动和旋转工具,试试将它移到不同的位置。

Setting-up-the-Scene-Directional-Lightfrom-raywenderlich.png
Setting-up-the-Scene-Directional-Light(from raywenderlich)

  摄像机位置

  现在将你的焦点放在摄像机的正确位置。摄像机定位不是一种科学,而是一种艺术。导演的工作就是通过移动和旋转工具将摄像机对准合适的位置。

  你可以使用位于Scene panel下的Game panel(游戏面板)的预览功能。另外,当你选中Hierarchy view(层级视图)中的摄像机时,会弹出一个小预览窗口。

  下一步,你应该将游戏屏幕的尺寸调整到iPhone的480×320,即在Game panel的右上角的下拉菜单中设置。如果你没有找到,那就选择UnityBuild Settings,然后切换平台到iOS。此时,你的视图应该类似下图:

Setting-up-the-Scene-Camerafrom-raywenderlich.png
Setting-up-the-Scene-Camera(from raywenderlich)

你的场景看起来不错,是吧?觉得有点像真正的导演了?

  Unity物理:碰撞器和体

  可以给场景的GameObjects添加Component了,这样就能实现对象之间的交互作用。

  你的目标是:当对象之间发生碰撞时,你要使对象对这个碰撞作出反应。幸运的是,Unity包含一个集成物理引擎,并且将它打包成一套组件,可以轻松地运用到你的游戏对象上。

  在你给对象添加“物理”能力以前,你必须先了解一下“物理”在Unity的含意。

  点击Components -> Physics菜单(顶部工具条),快速浏览现成组件的类型。

Setting-up-the-Scene-Physicsfrom-raywenderlich.png
Setting-up-the-Scene-Physics(from raywenderlich)

  Colliders(碰撞器)规定了对象的物理大小,可以独立于对象的视觉形状。通常来说,Colliders与复杂度有关,对象越复杂,使用Colliders的性能成本就越高。

  使用Box/Sphere压缩你的对象,这样,这些Colliders对你的应用的计算负荷就是最少的。另一种常见的Colliders是Mesh Collider。这是使用3D模型的Mesh来定义对象的边界。在这个情况下,视觉大小会等同于物理大小。

  除了与其他对象的物理碰撞,Colliders可以作为检测碰撞的触发器(这样你可以制作一些按程序发生的事件),但其实并不引起任何碰撞反应。这非常有用,因为当球穿过篮网时你就可以检测到。

  为了让对象作出反应,除了Colliders外,各个对象必须有一定形式的体。方法就是结对象添加一个Rigidbody(刚体)或CharacterController(特性控制器)。

  熟悉物理的最好办法就是多加练习——让篮球反弹起来吧!

  反弹篮球

  选择篮球,然后给它添加一个刚体,即选择Component > Physics > Rigidbody。然后点击Unity正中上方的“play”按钮,预览游戏——你会看到篮球落到地面以下。

  当你点击“play”时,如果你的篮球在场景中间“变形”,那么就选择篮球,不要点击属性中的动画复选框,然后再试一次。现在篮球应该停在正确的点上了。

  但如果篮球能飞出场景,那就不是运动了!你必须制作一个边界,防止球跑出游戏场所。

  为此,选择场景。墙壁对象是选择Component > Physics > Mesh Collider。对场景重复此动作。地面和场景。背景对象。然后选择场景。球场对象是选择Component > Physics > Box Collider。

  如果你再次操作场景,你会看到篮球仍然穿过地面。这是因为你仍然没有为篮球设置碰撞器!

  所以选择篮球,然后通过Component > Physics > Sphere Collider给篮球设置球体碰撞器。默认是大小适中,但你可以在检查器的球体碰撞器里调整半径。

  篮球能对场景作出响应后,当它撞到其他对象时,还要反弹。为了实现反弹功能,你必须将一种特殊类型的材料赋给篮球,在Unity中,这种材料叫作Physic Material(物理材料)。

  材料影响对象的外观,而物理材料决定对象发生碰撞时的行为。这与游戏对象Collider组件的材料属性有关。

basketball-rigidbodyfrom-raywenderlich.png
basketball-rigidbody(from raywenderlich)

  以下图片显示了篮球的刚体属性:

Physic-Materialfrom-raywenderlich.png
Physic-Material(from raywenderlich)

  在对象面板中选择Create下拉菜单,然后选择Physic Material,最后将选中的Physic Material命名中为“BallPhyMat”。

  现在设置Physic Material的属性如下图所示。各个属性的功能详情不在本教程的讨论范围之内,你可以查看相关网页。

Physic-Material-2from-raywenderlich.png
Physic-Material-2(from raywenderlich)

  为了让篮球反弹,摩擦力被调得相当低。

  将新创建的Physic Material赋给篮球,选择你刚刚创建的Physic Material,拖到篮球的碰撞材料属性中。

Physic-Material-3from-raywenderlich.png
Physic-Material-3(from raywenderlich)

  再次点击“play”按钮,这次它一碰到地面就反弹了,太好了!

  至于篮框,你希望当篮球穿过网时,它能对篮球做出反应。给篮框网格(hoop.LeftHoop).添加一个Mesh Collider。

  另外,你还要设置一个传感器或“触发器”来检测篮球穿过篮框的时间,方法就是给篮框(hoop.LeftHoop_001)添加一个Box Collider,但缩短盒子,并将其置于篮网下(方法是调整检查器中的值——我改变中心Z到-1.4和大小Z到0.2)。另外,点击复选框,将触发器的属性设为“true”。

Setting-up-the-Scene-Hoop-Triggerfrom-raywenderlich.png
Setting-up-the-Scene-Hoop-Trigger(from raywenderlich)

  注:用鼠标重设Collider的大小,选择Collider的对象,然后按下Shift。这样Collider的其他选项就会显示出来,你可以用鼠标调整它的大小。

  好吧!篮球也搞定了!——我们可以看看角色对象了!

  角色

  在游戏中,我们希望角色会把球扔出去。使球不在角色身上滚动是很容易实现的;给角色游戏对象添加一个Capsule Collider(压缩碰撞器)。

  你还必须调整这个Capsule Collider的位置和大小—-我改变高度到3.8,中心Y到1.8。

Player-1from-raywenderlich.png
Player-1(from raywenderlich)

  注:场景面板中的Collider是带绿色轮廓的——除非它们是Mesh Colliders,在这种情况下,碰撞边界是用网格表现的。

  反弹篮球的方法要求游戏可以测试到球撞到角色的手的活动。当这个事件发生时,你将把球拉回地面,就像现实中发生的那样。为了将Collider放在正确的位置,你必须研究一下角色的骨骼,然后在角色的手上添加Collider,用于反弹篮球。

player-2from-raywenderlich.png
player-2(from raywenderlich)

  上图显示了角色游戏对象的子项。这些子项从哪来的?问得好!

  这些子项来自于使角色活动起来的骨骼——父项是轴,它也有Skeleton Mesh Renderer组件,负责渲染网格。这些子项就是在Blender中建立的骨骼的骨头。在Blender中,ArmIK_L、ArmIK_R、LegIK_L和LegIK_R是其他选项,但在你的游戏中是不可用的。

  现在给playerBPlayerSkeletonPelvisHipSpineShoulder_RUpperArm_RLowerArm_RHand_R添加Box Collider。然后调整Collider的大小,使之与以下图类似,并将触发器指示器设为“true”。

Cizmosfrom-raywenderlich.png
Cizmos(from raywenderlich)

  预设件及其使用方法

  这一部分的内容你可能以后会用上,但不强制学习,所以如果你觉得累了,就跳过吧。

  游戏应用通常包含大量相同的对象,但使用的次数很多。例如,一个城市可能是通过反复使用相同的建筑做成的。高效的办法是制作一个可以反复利用的标准模板。另外,更新这个模板就能更新所有对象,从而简化过程。

  Unity支持这个功能,即使用Prefab(预设件)。你可以使用Prefab制作一个对像的标准副本,然后复制出多个相同的副本。然而,即使你不想制作对象的多个副本,它仍然有助于高效地制作和管理游戏对象。

  至于创建Prefab,做法就是从Hierarchy panel中拉一个对象到Project panel,或通过项目下菜单直接创建一个Prefab,然后把Hierarchy panel中的对象拖到这个对象中。

  现在,每一次制作这个模板中的另一个对象,你都只需要将这个模板拖到场景中。非常简单,也非常实用!

  注:更新模板的方法就是,选择所有你有兴趣的Prefab,制作你的更新,然后从工具条菜单中选择Game Object -> Apply Changes To Prefab。这个调整会自动赋给所有相关对象!

  总结

  如果你读到这里,那么恭喜啦,你刚刚完成了本教程最困难的部分——入门Unity GUI的使用。以后的学习就简单多了。

  这里有一个样本项目,在Unity打开它,选择FileOpen Project,点击Open Other,然后浏览文件夹。注意场景不会默载入——打开它,选择ScenesGameScene。

  现在我们来做一个总结,到目前为止,你已经了解了游戏对象可以包含子项,子项存在于它们的空间中。你知道了光照概念和Collider,以及与对象相关的物理概念。你还学会了为篮球添加Physic Material,以影响它的碰撞响应行为,最后你还理解了Collider如何用作触发器以及如何在物理引擎中使用Collider。

  这就是本教程的第一部分。在下一分部中,你将学习如何给场景添加互动活动和动画。不过在此之前,你得先了解脚本。那么敬请期待下一部分吧!

来自:游戏邦

0

主题

43

帖子

584

积分

高级会员

路人科技

Rank: 4

积分
584
发表于 2013-2-28 11:46:12 | 显示全部楼层
楼主可以得话把用到的例子也上传下给小弟呗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-27 02:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表