iOS Unity3D游戏引擎入门①

【这教材是来自教程团队成员 Christine Abernathy, 他是Facebook的开发支持团队的工程师。】
Unity是最为流行的游戏引擎之一。这是有充分原因的:Unity有一个让它很是容易上手的强大的可视化编辑器,功能强大,好的社区支持,有吸引力的价格,等等!
若是你渴望尝试Unity,没有比这篇教程更适合你的了!在这篇教程中,你会学习如何用Unity建立一个简单的iOS游戏 – 而且以前不须要有任何经验!:]
在这篇教程中,你要建立的这个简单游戏是让玩家在限定的时间内,绕过沿途的障碍物顺利达到终点。
在过程当中,会向你介绍Unity的开发环境和工做流程,而且学习游戏设计的基本概念。

这篇份教程将会分为三个部分:
在第一部分中,经过建立一个游戏,这个游戏具备一个带有控制机制的简单角色,经过这个游戏使你学会使用Unity的基本操做。你也会学习如何将的项目部署到iOS平台上。
在第二部分中,你会掌握如何使用内建的控制器对象和标准库中的脚原本加强角色的移动;如何用Unity Remote来调试;如何美化游戏的场景。
在第三部分中,你将会添加游戏规则到你的项目中,而且创建起游戏设计的概念,这些概念包括添加预制件,计时器,菜单和音效来加强游戏的体验。
准备好了添加一个强大的新框架到你的技能栏里了吗?请继续阅读!:]
 
 
让咱们开始吧
当你完成这个系列的教程,你就会熟悉Unity的开发工做流,它包括四个基本的部分:
  • 在Unity Editor中搭建你的游戏场景
  • 用MonoDelelop Editor撰写脚本
  • 用Unity Romote远程调试
  • 用Unity Editor发布到你的iOS设备上
 
在教程的第一部分中,你要安装Unity,学习编辑器界面的基本功能,而后经过建立一个项目,来向你介绍游戏基本的概念。
第一部分结束时,你会在游戏中获得有一个能够经过触摸触发而移动的角色。你也会在Unity Editor和iOS设备上测试你的项目。
这篇教程使用的是Unity版本4 – 若是你尚未安装,那就前去下载Unity吧。

Unity提供了一个功能完整的, 具备30天免费试用时间的专业版本。这个版本容许你开发游戏,而且能够部署游戏,并运行在iOS平台上。虽然Unity能够运行在Mac和Windows平台上,这份教程是基于Mac环境的。


建立项目
当你下载而且安装完Unity以后,开启Unity。若是这是你第一次启动Unity, 会提示你激活你的程序。选择Activate the free 30-day trial of Unity Pro选项,就像下面截屏所示:

而后你须要建立一个Unity帐号,若是你尚未的话,确认你的邮件地址,而后经过Unity登陆。

当你登陆后,你会被问及一些问题。若是你翻到列表的最下面,而后点击”Not Right Now.”,这样你就能够跳过这些问题:]。最后,你就能够开始使用Unity了。
到了这步,一个缺省的项目建立好并呈如今你的面前 – 就像下面这样:

扔掉那个项目,而后经过选择菜单中的FileNew Project来建立一个新的项目。一个项目导向会呈如今你面前:

在项目向导中,点击”Set”而后导览到你想要保存这个项目的文件夹下。输入DashAndZag做为项目的名称,点击“保存”,最后是”Create Project”。(会询问你是否想要保存以前打开的那个缺省的项目,可是你能够选择不这样作,除非基于某种缘由你想保留它…)

注意:在项目建立的阶段,这个项目导览包含了一些你能够导入的标准库。目前先忽略这点。你会在这篇教程的后面导入你须要的库。

Unity会关闭当前的项目而后再次用你新的项目启动:
<ignore_js_op style="word-wrap: break-word;"> 

啊哈,一个全新的画布!可是这些控件条,窗口和标签栏到底是啥?咱们要从哪里开始呢?


开始了解UI吧…
 
值得花一些时间来调整一个真正适合你的Unity Editor界面,因此让咱们瞧一瞧。在右上角编辑器的Layout标签栏那里停一下。将视窗的模式改成Wide:

<ignore_js_op style="word-wrap: break-word;"> 
这里将你看到打散的各个部分,每一个部分都用高亮标出:
<ignore_js_op style="word-wrap: break-word;">
 

  • 项目视图:你的Unity项目包含的资源目录的内容会在这个栏目里显示出来。这里有脚本,场景,预制件和其余你建立的Unity对象。
  • Hierarchy(层次列表)视图:这里包含了当前场景中的GameObject。在Unity游戏中,每一个出现的对象称之为GameObject。这些对象能够是你从the GameObject菜单下建立的简单的对象,或者是你导入的资源。你那个初始的项目包含一个GameObject:主摄像头。
  • 工具条:工具条容许你在场景视图或游戏视图中操做对象,来控制你的编辑器视图如何被显示,也能控制编辑器中游戏的预览。
  • 场景视图:在这个视图里,你能够摆放你的GameObject的位置来搭建你的游戏。这个场景视图包括了一个场景Gizmo(就是右上角带有坐标轴的那个东东)它标明了场景镜头的当前方位。
  • 游戏视图:这是一个来自你游戏中摄像头的视角。当你点击工具栏上面的Play按钮,你会看到这个游戏视图。另外,你也能够经过窗口顶部的标签来切换游戏和场景视图。
  • Inspector(检查器):这个东西提供了被选中的GameObject的进一步详细信息。你能够改变这些对象的属性,例如尺寸,位置,或者是关联的脚原本改变这个GameObject的行为。
 
你将会很熟练的使用工具栏中的变换工具来放置GameObject,并在场景视图中逛逛。好吧,让咱们转到下节:
 
 
得到一个把手
Hand工具让你控制场景中你的视角

<ignore_js_op style="word-wrap: break-word;"> 
最好理解Hand工具的方式是想象你本身掉到了3D场景中,周围有不少GameObject. 在你前面的物件是可见的,而那些在你身后的是不可见的。
你或许但愿在场景中后退几步,这样能够看到更大的视角,向左或向右移动看见其余物件,或者旋转和平移看看你身后有些啥。这个Hand工具就是为你作这些的。
当你开始添加愈来愈多的GameObject后,你会发如今放置GameObject以前你会愈来愈多的使用这个工具来在场景中调整你的视角。
要看看Hand工具是如何工做的,首先选中它(在工具条的最左边),而后从Hierarchy视图中选择主摄像头(只是让你在场景的视图中有东西能够看到)。你能够拖动画布来移动整个场景。
要缩放,你可使用你的鼠标滚轮,或者按住Control键并拖动鼠标。你能够经过按住Option键,拖动鼠标来旋转。若是你想在任什么时候候重置你的视角,你能够点击场景右上角Gizmo的其中一个轴。
<ignore_js_op style="word-wrap: break-word;"> 
把玩一会Hand工具,直到你熟练在场景中移动,并可使用Control和Option组合来缩放和旋转。
你常常要在Hand工具和其余工具之间切换,因此记住它的快捷键是有必要的。缺省状况下,这些按键一个挨着一个,在你的键盘的左上角 – Q, W, E, 和R,分别表明Hand, Move, Rotate和Scale.

注意:Hand工具并无移动物件。它仅仅改变你场景的视角,因此它看上去就好像物件被移动了。使用各类Hand工具选项练习在场景中移动。


移动它或放开它
使用Move工具,你能够在3D空间里移动GameObject。


<ignore_js_op style="word-wrap: break-word;"> 

选择主摄像头(若是你在场景视图里没有看到它,能够再Hierarchy视图中双击它),而后点击Move工具。你应该会看到在主摄像头边上出现一个gizmo,有箭头表明三个轴。经过这些,你能够移动这个物件:
<ignore_js_op style="word-wrap: break-word;"> 

红色的箭头表明X轴,绿色箭头是y轴,而后蓝色箭头是z轴。你能够经过选中这个物件,按住鼠标左键,而后在gizmo中拖动,来移动一个GameObject.
选中主摄像头,移动一下。看一下在Inspector中的transform组件。Position栏目中有x, y和z值表明GameObject的位置。当你移动物件的时候,注意这些值的变化。

你能够改变GameObject的transform位置,经过使用Move工具,或者直接在这些输入区域输入你想要的位置。
若是你只想在一个方向移动物件,选择gizmo中相应的轴,按住左键,拖动那个轴。经过仅仅在x轴移动主摄像头来测试这点,在Inspector中查看,仅有x-position的值改变了。在y和z轴重复一样的动做。
你已经知道如何在场景中变换你的我的的视角,也知道了在场景中如何移动物件。到目前为止都还不错哦!
 
 


你带着我转一转
Rotate工具让你在3D空间旋转GameObject

<ignore_js_op style="word-wrap: break-word;"> 

要了解Rotate工具,并知道如何使用它,更深刻的讨论场景的Gizmo是颇有必要的。在场景视图右上角能够找到场景的Gizmo,不一样的视图有着不一样的模式。

有一种模式(如左下方那个图)让你经过一个3D透视,以一种自由的方式观察你的场景。若是你想要更好的表现你的游戏在3D空间的样子,这是很是有用的。
你能够点击gizmo下面的文字,切换到isometric视角(如右下方图片展现的那样)。这种模式当一个物件被旋转的时候,它更加具备可视性。

<ignore_js_op style="word-wrap: break-word;"> 
另外一个模式是x轴视图,它让你可以观察你的场景,就好像沿着x轴从上往下看。若是你想要在y-或z-轴移动物件,而保持x-轴不变时,这种模式很是有用。
<ignore_js_op style="word-wrap: break-word;"> 
在相似的方式下,你有y-和z-轴模式让你从那个方向得到场景的视角。
<ignore_js_op style="word-wrap: break-word;"> 
<ignore_js_op style="word-wrap: break-word;"> 
选中主摄像头。在Gizmo上点右键,选择Free, 切换到自由透视模式。
<ignore_js_op style="word-wrap: break-word;"> 
而后点击gizmo下面的文字,在isometric和perspective模式之间切换。反复点击x- y-和z-轴模式观察场景Gizmo和场景视角的变化。
再次选择自由视角来测试旋转。主摄像头仍然被选中的状况下,点击Rotate工具。你应该看见一个Gizmo出如今主摄像头上,它包含了表明三个旋转轴的不一样颜色的圆环。
<ignore_js_op style="word-wrap: break-word;"> 

左键点击主摄像头的的中心,用你的鼠标拖动旋转主摄像头。当你旋转这个物件的时候,注意Inspector的TransformRotation属性的变化。注意,你能够手动的编辑Inspector中这些值,若是你愿意的话。
点击主摄像头中心位置,你是要打算沿着全部的轴自由的旋转。经过点击表明某个轴的颜色的圆环,你能够沿着这根轴旋转GameObject。举例来讲,若只要沿着x-轴旋转,点击红圈选中它,而后按住鼠标拖动来旋转这个物件。若只要沿着y或z轴旋转,重复相同的步骤。
 
 

一切都归结为视点
另外一个关键的值得学习的概念是局部和全局(世界)的视角的区别。
经过InspectorTransformRotation字段,重置主摄像头的旋转角度到0,0,0。点击那个叫作”local”的工具条。而后选择移动工具,这样你能够看见场景的Gizmo:
意场景的Gizmo和主摄像头的Gizmo方向是一致。在场景中,x-轴指向同一个方向,而且y-和z-轴也同样。如今用Inspector的设置TransformRotation值为0, 0 -20,沿着z-轴来旋转主摄像头.
 
<ignore_js_op style="word-wrap: break-word;"> 
注意主摄像头的Gizmo如今绕着z-轴旋转 – 这表示物件的轴在它本身的局部坐标系中。这与场景Gizmo是不一样的,场景坐标显示的是全局空间的操做。切换到全局视角来查看之间的不一样。

在这篇教程的后面,你将会学习如何移动GameObject,发现你会发现当移动物体时,使用的你指定的不一样空间(世界或者局部)的差别。
看一下被旋转的主摄像头,若是你在局部坐标控件的x-方向移动它,它会在与你在世界坐标中的x方向移动它最终的位置不同。把这点记在你的脑子里,从此会有用!
在你继续以前,重置旋转角度到0, 0,0,让咱们回到一个干净的状态。

缩放工具
缩放工具容许你,你已经猜到,在尺寸上缩放GameObject
<ignore_js_op style="word-wrap: break-word;"> 
与其余GameObject的操做工具比较,你只可以改变三个轴中的一个,固然你能够选择改变InspectorTransform组件来替代这个工具。
选择主摄像头,而后注意缩放的Gizmo,在每一个轴的末端包含一个方块把手,还有一个在中间。
要在全部轴方向自由的缩放,选择物件中间的方块,而后左击,而后向上移动让GameObject放大,向下移动让它变小。看一看InspectorTransformScale的属性。当你放大或缩小这个物件的时候,你应该看到数字变大或变小。
<ignore_js_op style="word-wrap: break-word;"> 

经过选择红色的gizmo把手,测试沿着x轴缩放,而后握住向外移动把手。用Inspector的TransformScale x-值来核对只有一个改变了。也试一试y和z轴。
当你玩转了这些控制按钮后,在InspectorTransform栏目下重置主摄像头为下面的设置:
  • Position: 0,1,-10
  • Rotation: 0,0,0
  • Scale: 1,1,1
 
你的Transform菜单应该看上去像这样:

在这份教程中,你将要学习其余编辑器界面组件。包括使用Play按钮来试玩一个游戏和使用Unity调试器。


除了孤独没有其余:添加GameObject
 
如今你已近涉及了一些基本概念,你要开始添加GameObject来给摄像头做伴 – 只有它本身,确实很孤独:]

如今相机面对的是一个很是荒凉的世界。 不要惧怕 – 准备来添加一个方块类型的GameObject来表明主角,还有一个平面类型的GameObject来表明主角在上面移动的地板。

当你用Unity来设计一个游戏,最好的实践是对于要开发的游戏先不要用任何花哨的资源来表明一个主角。在这种方式下,你能够关注优化游戏玩法和主角的移动上,而不被其余图像元素所分心。
 
另一个注意点是Unity是一个很好的游戏引擎,可是你不要想用它来建立图像资源。在图形部门,那里应该有许多工具都是至关不错
的,而Unity善于从范围较广的那些工具中导入资源。

一般状况下,典型的游戏开发的分工是,游戏开发使用Unity开发游戏玩法,而美术设计并行的使用他们喜欢的图像工具建立各类资源。当两方工做收敛时,这时候导入图像资源来给游戏增色是合理的。

如今你已近认知了那点,让咱们开始吧!经过选择Game ObjectCreate OtherPlane.添加一个平面类型的GameObject来表明地面。
这个新的平面GameObject应该出如今Hierarchy视图中。在Hierarchy视图中选择地面,而后使用Inspector设置TransformPosition为 0,0,0.再用Inspector来放大它到50, 1, 50.你的场景将会看上去像这样:

下一步,你将要添加主角GameObject,在你的游戏中将会用一个方块来表示。就是这样的,英勇的小方块!

选择Game ObjectCreate OtherCube,而后一个新的方块类型的GameObject将会出如今Hierarchy视图中。在Hierarchy视图中选择这个方块,而后用Inspector设置TransformPosition为0,0,0.你的场景应该看上去像这样:

 
点击移动工具,而后点击场景Gizmo的y轴来只在y轴方向有约束的移动。向上移动英勇的小方块让它稍稍高于地面(地板)。你也能够设置变换位置到0,1,0来向上移动这个立方体一点点。

如今到了激动人心的时刻了 – 点击在Unity编辑器的工具条上的Play按钮(在最上面)来预览你的游戏:

你正在使用 Unity编辑器测试你的游戏。这个编辑器应该切换到游戏视图,而且你应该看到像这样的一些东西

你所看见的游戏的视图是经过你的场景中的主摄像头看见的东西。你的主角,这个英勇的小方块,出如今远处,地面的上方 – 一我的的世界,可是勇敢的屹立在那里!
由于你尚未添加任何其余组件来改变玩家的行为,因此游戏中没有啥事情会发生。另外场景也有一些暗。下一步,你能够首先添加一个光源到你的场景中。
经过再次点击Play按钮中止游戏预览。回到场景视图,添加一个光源。选择Game ObjectCreate OtherPoint Light。一般状况下,在从此调整它的位置前移动光源到原点。使用Inspector设置transform position为0,0,0.

如今调整光源的高度和亮度,让你能够看清场景的更多范围。这里有个提示:使用移动工具,而后沿着y轴作有约束的移动。
要调整亮度,修改Light组件中的Range和Intensity设置。使用”手型”工具来旋转,若是你但愿获得场景更好的视角。

一个好的方式来观察你是否有了足够的光线是使用Game面板切换到Game视图(至关于点击Play按钮)。来回尝试直到你能够看见你的角色:
当你调整完以后,点击Play按钮来合适你的修改。当你切换到游戏视图,你的视图应该同下面的类似:
 
恭喜你,你已近添加了这个教程在这个阶段你须要的全部的GameObject!记住,做为一个好的实践,你首先要把注意力放在游戏玩法上,而后再添加图像元素。
既然你已经作了一些有意义的事情,继续前进,保存项目中的场景。一个项目能够有一个或多个场景组成。在游戏中,你能够认为一个场景等同于游戏的一关。
在这个教程中,你保存教程的每一个部分做为一个场景。这是人为制造魔种游戏关卡的概念,可是它让你能够从一个场景到另外一个场景,来重用那些资源。
要保存场景,选择FileSave Scene,在Save Scene对话框中,命名你的场景为Level_1。你的项目视图应该被你刚才建立的场景所更新。




开始移动:事件函数
游戏目前太静态了!它迫切须要运动让它动起来。
你能够经过建立你本身的脚本或者使用预先打包的脚本关联到相关的GameObject来执行一个动做来添加移动。举例来讲,在这个教程的第一部分,你将会建立一个脚本,当玩家被触碰的时候,移动你的角色。你建立的这个脚本须要响应触摸事件来改变英勇的小方块的位置和旋转角度。

Unity支持如下这些语言来实现脚本化:JavaScript, C#,和 Boo。在这个教材里,你会用到JavaScript. Unity的脚本语言包括预先定义的事件函数,你可使用这些函数来定义某个GameObject的行为。
 
  • 你将要常常用到的事件函数是Update()函数。若是你在你的脚本里定义这个函数,它会在每帧被调用一次。你的游戏显示的内容每帧会被重绘一次,所以Update函数在特定的帧率下负责显示的更新。
    一个游戏运行在每秒必定数量的帧率下,另外有一件是须要记住的事是这个帧率很是依赖游戏运行的平台,而且还会被被其余应用占用操做系统的资源。这里的意思是你不该该作任何事件敏感的事情,而且你不能假设它会以固定的频率被调用。
  • 另一个预先定义的事件函数,FixedUpdate(),会被已固定的频率, 独立于刚才提到的帧率来调用。若是你的脚本定义了这个函数,它会以固定的间隔被调用(调用和调用之间与Update方法比较有很大的不一样)。
    在FixedUpdate函数中,你应该来处理任何物理相关的工做,由于物理的计算是很是时间敏感的。举例来讲,你能够有一个游戏对象使用物理引擎,例如刚体(你会在以后学习到更多这方面的信息)。当这个物件与其余物件碰撞后,你想要计算做用于物件的力,那你就应该在FixedUpdate()函数里作这件事。
    对于像是改变物件的位置或旋转角度等操做,最好是在Update()函数里去作。
  • 第三个有用的函数是Start(),它会在第一帧更新发生以前被调用。你通常会把初始化的操做放在这里。
  • 最后,Awake()函数当游戏开始的时候被调用。它是另一个放置初始化代码的好地方。


对对碰
让咱们来试一试。经过选择AssetsCreateJavascript建立一个新的脚本。一个带有缺省名字为NewBehaviorScript新的脚本会出如今项目视图中。在脚本的名字中单击,而后从新命名它为MoveSimple。
双击脚本打开它。它应该在捆绑Unity编辑器的MonoDevelop中打开,而后包含下列代码:
[C#]  纯文本查看  复制代码
?
 
1
2
3
4
#pragma strict
function Start () {
}
function Update () {
}

 
Start()和Update函数已经为你建立好了,由于它们是经常用到的函数。你如今不须要Start()函数。在#pragma行后面,添加下面的变量来控制英勇的小方块的移动和旋转速度:
 
[C#]  纯文本查看  复制代码
?
 
1
var speed : float = 3.0;
var rotateSpeed : float = 10.0;

 
用以后的代码替换空的Update()函数:
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
function Update () {
     // Detect mouse left clicks
     if (Input.GetMouseButtonDown(0)) {
         // Check if the GameObject is clicked by casting a
         // Ray from the main camera to the touched position.
         var ray : Ray = Camera.main.ScreenPointToRay
                             (Input.mousePosition);
         var hit : RaycastHit;
         // Cast a ray of distance 100, and check if this
         // collider is hit.
         if (collider.Raycast (ray, hit, 100.0)) {
             // Log a debug message
             Debug.Log( "Moving the target" );
             // Move the target forward
             transform.Translate(Vector3.forward * speed);      
             // Rotate the target along the y-axis
             transform.Rotate(Vector3.up * rotateSpeed);
         } else {
             // Clear the debug message
             Debug.Log( "" );
         }
     }
}

 
保存你的修改。

这段代码首先查看鼠标的点击事件,特指来之鼠标左键的输入。参数“0”表示左击,“1”表示右击,“2”表示中键点击,当咱们使用GetMouseButtonDown函数的时候。若是点击被监测到,那么代码构建一条从主摄像头到鼠标点击位置的射线。

collider.Raycast()函数监测到关联这个脚本的碰撞体是否被射线命中。若是碰撞体命中,这个collider.Raycast()调用返回true.这个函数有三个参数:
  • 你构建的射线。
  • 一个RaycastHit对象,若是碰撞发生,它会包含更多的信息。
  • 一个射线长度的参数。
 
假设有一个true的结果,后面的代码根据speed变量朝前轻推你的角色,以及基于rotateSpeed变量旋转你的角色。transform.Translate()来移动GameObject的位置,经过它的Vector3输入来指定方向和距离。

Vector3是一个3D的向量,表示物件的方向和长度,或矢量。这个向量能够打散成x,y和z三个部分。

在代码中,你英勇的小方块是朝前方移动一个乘上速度的变量的的距离。Vector3.forward等同于Vector3(0,0,1),而且速度的乘数是3,将会使方块移动Vector3(0,0,3)
角色移动的方向是在角色的局部空间里。要体验这个方向,选中方块,而后使用move工具,而后查看z轴方向。那是角色将要移动的方向。

transform.Rotate()函数根据Vector3输入的一个角度旋转GameObject。欧拉角被用做描述GameObject的旋转。在这个旋转的案例里,物件会沿着z轴旋转欧拉角z度,沿着x轴是欧拉角x度,最后沿着y轴表明欧拉角y度。

在上面的代码里,使用Vector3.up或者Vector(0, 1, 0)来旋转角色,它表示沿着y轴旋转。这个旋转角度是乘上了旋转速度。这个旋转是相对于角色的局部坐标系的。因此你英勇的小方块会沿着它的y轴旋转,正如你所知道的,有别于沿着世界坐标系旋转。
 
注意:一个真实的游戏不会使用这种类型的移动来控制一个角色。它们用在这里目的是简单的演示涉及移动GameObject的基本概念,在这个教程以后的部分被更加合理的移动所替代。

这段代码里包含了两个Debug.Log()语句。当游戏运行的时候,这个日志输出被打印到Unity的控制台。你能够在Unity编辑器的底部看到最后的日志的输出。你也能够经过选择WindowConsole打开控制台来查看日志的输出,也包括清除日志。

你也能够把目光保留在Unity编辑器的底部,关注在日志的输出上,那里有任何脚本的错误会被显示出来。

经过代码,如今你已经定义了一个行为。你能够分配这个脚本到一个GameObject上。在Hierarchy视图中选择那个方块,而后选择ComponentScriptsMove Simple。这步称之为添加一个脚本行为到一个GameObject,你只要选择你已经建立的(名叫MoveSimple)的脚本。
注意Inspector中如今包含了一个Move Simple脚本栏。你在代码中定义的公共变量,speed和rotateSpeed,在Inspector视图中可见了。你能够在不须要修改脚本的前提下,修改这些变量改变被关联的GameObject行为.

这个意思就是,若是你有两个角色在场景中都带有MoveSimple脚本关联到它们,在InspectorMove SimpleSpeed 字段下,经过增长speed的值,来让一个角色比另一个移动的快一些。

点击Play来试玩游戏,触碰角色一下,而后注意在Inspector中改变的transform position和rotation属性。
注意transform position从0,1,0开始变化到0,1,3 – 换句话说,在z轴方向有3单位的移动,是由于speed的乘数的关系。旋转也从1,1,1变换到1, 10, 1, 这个很是接近rotateSpeed乘数。

当游戏运行的时候,你能够在Inspector中改变速度和旋转的变量。在点击角色后,增长速度而且观察变换位置。
中止游戏,而后注意观察速度和旋转角度变量被设置会它们原来的值。任何你在玩游戏的过程当中改变的都是临时的。这让你有机会捣鼓各类设置,而后返回最初的设置状态当你已经完成你的预览。若是你想要持久的变化,你能够在测试游戏以前再次这样作。
注意当你玩游戏的时候,根据玩家是否被点击或不被点击,控制台记录准确的调试信息。
 
 
在摄像头上也来作一边
你会注意到当你移动英勇的小方块时,他离开摄像头愈来愈远 – 这不是一个好的感受。就像一个负责任的家长,你但愿经过修改你的游戏,让主摄像头跟追在你的角色后面,并保持固定的距离。这是第三人称游戏典型的手法。

选择AssetsImport PackageScripts而后在Items to Import栏目的中,仅选择SmoothFollow脚本,而后点击Import


注意:若是你没有获得import selection对话框,当你选择AssetsImport PackageScripts,那么试图退出Unity而后从新启动。这点对我来讲是有效的。

在你的项目视图中一个新的Standard Assets文件夹应该会出如今那里。若是你导览到它的子文件夹下,你应该能够看到也SmoothFollow的脚本。双击这个脚本在MonoDevelop中打开它,这样你看到代码的关键部分。
.
[C#]  纯文本查看  复制代码
?
 
var target : Transform;


上面表明用于被跟踪目标的公共变量。目标的位置信息用来设置跟随者的位置和旋转角度。
跟随者的位置和旋转角度在LateUpdate()中设置,这是另外一个预先定义的事件函数。这个函数在UPdate()函数完成后被调用。 你能够将依赖那些在Update()发生的操做的代码放到那里。
当英勇的小方块的位置和旋转在MoveSimple脚本中定义的Update()改变后,这个摄像头能够在SmoothFollow脚本的LateUpdate()中更新它的本身位置和旋转角度。

[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
..
var wantedRotationAngle = target.eulerAngles.y; // 1
var currentRotationAngle = transform.eulerAngles.y;
..
currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
..
var currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
..
transform.position = target.position; // 2
transform.position -= currentRotation * Vector3.forward * distance;
transform.position.y = currentHeight;
..
transform.LookAt (target); // 3
..


这里列举上面代码的关键点:
  • 计算跟随者须要的旋转的角度,来匹配目标的旋转。这个旋转沿着y轴。
  • 依赖与distance变量的偏移来让跟随者保持在目标后面。也使用来之#1的结果沿着y轴旋转跟随者。最后确保跟随者以高于目标一个固定的高度。
  • 确保跟随者老是面对目标
如今关联脚本到主摄像头。选择主摄像头在Hierarchy视图中,而后选择ComponentCamera ControlSmooth Follow:

核对那个为Smooth Follow的新栏目已被添加到主摄像头的Inspector中。


注意在这点上,Target变量没有被赋值,有一个None在它边上。你想要分配一个方块GameObject到这个输入上。当主摄像头仍然被选中的前提下,而后在Inspector中Smooth Follow脚本可见,拖动方块GameObject从Hierarchyshi视图到Target变量。另一个选项是,你能够点击在Target值边上那个带有一个点的小圆圈来获得一个物件的列表来选择。
Target变量应该连接到方块(你的角色)。


点击Play按钮。你应该当即在视图里看到变化,就像你从一个给定高度向下看着玩家。点击玩家来移动它,而后观察摄像头如何跟随玩家。注意在Inspector中的主摄像头位置信息,而后它在英勇小方块移动时的变化。

中止游戏,而后进入下一步以前保存场景。
部署到iOS上若是你像我那样,你会火烧眉毛的想看看这如何在iOS设备上运行的。:]好消息是试用版的Unity Pro容许你在iOS上测试你的项目。

在实际设备上测试你的Unity项目是一个好的实践(i.e. 不是模拟器)。你不想让你的测试只到模拟器为止,便是你只能作到这点。由于游戏开发特别依赖相关的硬件,你应该在实际的设备上测试,这样你能够尽早发现性能上的问题。.

要部署到一个iOS设备上,你须要注册一个Apple的开发者帐号,这样才能够有设备部署能力。若是你尚未,去苹果那里,花掉99美金 – 咱们在这里等你.:]

Unity能够为你的游戏建立一个Xcode项目,这让你能够部署到一个iOS设备上。要完成这步,选择FileBuild Settings:
选择iOS平台,而后点击Switch Platform. 而后点击Player Setting按钮,你能够在Build Settings对话框的底部找到这个按钮。Unity编辑器的Inspector应该显示Player Settings,这里能够定製你的iOS部署所须要的参数。根据下面来修改:Resolution and Presentation
  • Default Orientation: Landscape Left

 
 


其余设置
  • Bundle Identifier: 须要Bundle Identifier来正确在你的设备上构建你的应用。
  • SDK Version: Device SDK
  • Target iOS Version: 4.3

 
回到Build Settings对话框。在Build section的场景列表中添加那个要生成Xcode项目的场景。由于你的项目仅有一个场景,这里不用动脑。经过点击Add Current按钮来添加Level_1场景。
 
 
点击Build按钮来启动构建的过程。你会被问要指定的位置来保存这个Xcode项目。导览到你想要保存的的位置来保存你的xcode项目,在Save As字段中输入DashAndZag,而后选择保存。Unity会建立这个Xcode项目,而后打开包含xcode项目文件的文件夹。这个项目会有一个叫作Unity-iPhne.xcodeproj的文件。用Xcode打开这个项目,确保scheme设置为Unity-iPhone,选择你的设备,而后编译这个项目。
 
<ignore_js_op style="word-wrap: break-word;">   
 
运行这个应用。你应该首先观察到一个启动的屏幕做为Unity缺省的logo.而后,你的游戏应该出现了:


 
 
触碰这个英勇的小方块而后让它四处移动。你已经构建和部署了你的第一个Unity项目在iOS上了。(文章转载自互联网)
相关文章
相关标签/搜索