zoukankan      html  css  js  c++  java
  • 使用Unity做2.5D游戏教程(一)

    最近在研究Unity 3D,看了老外Marin Todorov写的教程很详细,就翻译过来以便自己参考,翻译不好的地方请多包涵。

    如果你不了解2.5D游戏是什么,它基本上是个3D游戏而你可以想象是压扁的,所以游戏是只是沿着2D轴。

    一些好的例子是:Super Mario Brothers WiiLittle Big Planet, or Paper Monsters.

    一个很好的方法去做2.5D游戏或者3D游戏,是通过一个流行,简单和价格实惠的游戏开发工具叫做Unity。

    所以在这个教程系列里面,我打算让你看到怎么使用Unity去创作一个简单的2.5D游戏叫做“Shark Bomber!”

    教程目标:

    如果你是刚开始接触Unity,但喜欢学习它,这个教程就针对你。你可以从头开始一步一步学到怎么去创作一个简单的游戏。

    在这个游戏中,你可以控制一个小的但是全副武装的飞机,你的工作是去轰炸邪恶的鲨鱼,保护那些可爱的小丑鱼。

    Unity 不使用 Objective-c,所以对与这个教程,你不必具备任何Objective-C 经验。然而有面向对象语言的经验是加分的,理想的是 C#,Java,or Actionscript.

    请记住,这个是一个Mac环境下开发的用户教程,windows用户可能无法精确找到相关设置。所以,请记住,你将只能在ios设备上做测试而不是模拟器。所以一定确保你有一个ios设备。

    OK,让我们潜入Unity,但是确保避免那些鲨鱼!

    安装 Unity

    首先让我们安装这个Unity 工具,如果你已经在你的mac下安装了就可以跳过此步。

    可以参考之前写过的博客的前半部分:

    http://www.cnblogs.com/jiangshiyong/archive/2012/06/20/2555731.html

    重要提示:本教程中,您需要选择“Start Pro / iOS Trial”选项,这样你就可以发布到AppleStore(而不是简单的“免费”选项!),或者在破解下只能学习使用,不能发布到AppleStore。

    注册完成后,Unity启动,你应该看到一个窗口,看起来像这样:

    关闭“Welcome to Unity”弹出框,去到File>New Project,选择一个磁盘上的某个文件夹并命名项目SharkBomber。确保所有的包都取消选中,然后单击“创建项目。


    现在你面对一块空白的面板。哇,有很多的按钮,是吧?不要担心 - 在下一节中,我们会一点一点去了解它们。

    1.Unity 编译器 介绍:

    让我们做一些额外设置,从一个已知配置里面得到一些东西。

    在应用程序窗口顶部的右上角你会发现一个选择框Layouts,从列表中选择“Tall”.这将重新排列窗口的内容(默认是"Wide"仅供参考)。

    现在找到左上角的栏(及在工具栏的下方),叫“Game”,拖动它到底部窗口附近直到你看到它将扑捉到底部的迹象,就把它拖到那吧。

     

     现在你应该看到下方图片上的布局:

     让我们快速过一下这些不同的面板:

    1.Scene:在这里你可以到处移动你的3D模型,可以浏览你的3D世界。

    2.Game:这就是你所选的摄像机(主摄像头)看到的实时画面直到你使用编译器。以及当你点击“Run”时

    你的游戏运行,你可以测试你的游戏。

    3.Hierarchy:你的对象树(例如很像HTML DOM),目前你只有一个摄像头,但我们之后会添加一些东西。列表中的对象目前在现场。

    4.Project:这是你项目中的内容,你的资产,音频文件,一切你现在或以后将要使用到的内容。

    5.Inspector:这里你可以看到在场景中所有选定的属性,你可以调整它们。Unity的独特之处是,当你运行你的场景时候,Inspector是活动的,所以它也是你的调试工具。

    6.Toolbar:这里,你有这些工具来交互在你的场景中的对象,运行和暂停按钮来测试你的场景,

     在你的Unity3D项目中,你可以有许多不同的场景,你可以在它们之间进行切换。目前,你有一个空的场景在编译器中打开,让我们把它保存下来。

       1.在Project面板中单击右键,选择“Create>Folder”- 一个新的文件夹出现了。

       2.把它重命名为“Scenes”- 你可以通过左键单击文件夹名称或通过选择文件夹然后按下“Enter”键。

       3.现在,你在主菜单上选择“File/Save scene”-导航保存对话框到【你的项目目录】/Assets/Scenes下

         把这个场景命名为“LevelScene”.

     OK - 完成。让我们来看看 - 在Project面板中打开Scenes文件夹 - 有你的LevelScene场景。爽!

     现在,我们开始准备运行游戏-点击上面的Play按钮!没有太大变化-但事实上你的游戏已经在Game面板中运行了!不要忘记停止该游戏,再次点击Play按钮(这一点很重要!)。

     2.设置一个iPhone Unity3D的项目

    关于Unity的优点之一是它可以为iPhone ,Mac,Wii和其它平台开发游戏。在本教程中,我们将建立一个iPhone游戏,所以我们需要先设定一些细节。

    从菜单栏中,选择“File>Build Settings”,然后点击“Add current”按钮来为你的项目添加目前所选的场景。添加后你可以看到它得到一个序列为0的编号,这意味着它是游戏开始时第一个要加载加载的场景。这正是我们想要的。

    从Platform列表中选择IOS,然后点击“Switch platform”按钮。Unity 的logo现在就出现在Ios一行上。

     这是我们所需要的所有设置,单击“Player settings”,然后关闭这个弹出窗口。你会注意到这个Player setting 在Inspector面板中打开,我们也需要在这里设置几项事情。

    在Inspector面板下的这个“Per-Platform Settings”,确保选择卡中显示一个 iPhone图标选中,如下:

    这里有很多设置,你从Xcode中了解过它们中的大部分,所以你一会可以自己探索和玩。

    现在使用这个Inspector进行以下更改:

        1.在这“Resolution and Presentation”项下,“Default orientation”(默认方向)选择“Landscape Left”。

      2.在这“Other settings”项下,“Bundle Identifier” 输入框中填入你想填任意内容(除了给出的默认内容)。

        3.在这“Other setings”项下,设置“Target Device” 为  “iPhone only”。

    最后一触摸:在左下方,这个“Game”标签下,你有不同的方向/决议去选,-选择“iPhone Wide(480*320)”来匹配默认的横向布局。

    如图,红线圈住的就是这些设置:

     

    恭喜,你现在有了一个基于“Hello World”的项目,你可以尝试在你的iPhone上运行。

    3.在你的iPhone上运行游戏

     为了测试到现在为止我们所做的一切,我们打算在Xcode和你的iPhone上完成测试这个项目。

    启动你最喜爱的Xcode版本 - 关闭欢迎界面如果有一键切换回Unity.这是一招Unity如何分辨

    用哪个Xcode版本,-只需要运行它。

     回到Unity,从菜单栏中选择“File>Build&Run”,这将再次弹出这个Build Settings,点击“Bulid

     and Run”按钮。

     你会问你在哪里保存你的Xcode项目。在你的项目目录里面创建一个名为“SharkBomberXcode”文件夹,

    (这是你Xcode的东西驻留的地方),作为一个文件名放在“SharkBomber”.

    过几分钟后这个项目被编译,你将有一个Xcode窗口打开的叫做 Unity-iPhone的项目。Unity已经生成了

    Xcode项目源代码,你现在可以把这个生成的项目通过Xcode编译和运行。

    你可能想看看源代码 - 但它实际上是一个导入一些框架的样板,包括一些dll 文件和一些assets(资源文件)

    ,所以没有太多你可以玩的。

    你有两个目的,所以确保你的ios 设备是插入的,并且选择“Unity-iPhone” target和你的设备。(我不能

    在模拟器上运行,如果你够伟大,但现在我只能连上真机运行),

    梦想成真 -点击Run 按钮,你的Unity 项目现在运行在你的iPhone上。

    干得好,你可以看到Unity的默认启动画面,并且蓝色背景的场景一角有些字“trial version(试用版)”。

    停止运行任务,切换回Unity,并且保存你的项目。

    4.设置场景

    首先让我们在scene上设置主摄像头。在“Hierarchy”面板中选择“Main Camera”,在Inspector面板中找到

    “Projection” 并把它设置成 “Orthographic(正楷)”,  "Size" 设置成“10”,在"Clipping Planes " 设置“Near” 为“0.5”,“Far”为“22”。现在你在这个scene里面看到在你的摄像机旁边有个盒子---这是个界限在这个场景上从你的角度什么将会看到。

    请注意我们已经设置相机 “Projection”(投影)为“Orthographic” (正面),这意味着深度坐标不会影响怎么观看在屏幕上观看东西--我们将有效地创建一个2D游戏。一会让我们做一些工作知道你熟悉Unity,然后我们将切换到3D投影。

     设置你的相机Position(位置)(在Inspector面板上)x,y,z轴为【0,0,0】,注意从现在开始,当我写Position(位置)为[x, y , z]时,就是设置这三个属性的值。

    在这个Project 面板中单击右键,然后选择“Create/Folder”,场景新文件夹“Textures”.然后下载这个背景图片

    http://cdn5.raywenderlich.com/downloads/background.png

    我已经把它跟其它一起放在游戏项目中。下载图片后,拖拽这个背景图到你刚刚创建的“Textures” 文件夹中,

    完成之后, 选中文件夹“Textures”下的“background” texture,并在左边的“Inspector”面板中观察这个纹理

    (texture)的属性:在底部Preview面板中会看到“RGB Compressed PVRTC 4bits.”,所以Unity 发现了我们

    导入的纹理(图片)并把它进行了压缩。

     

     从菜单栏选择“GameObjectCreate otherPlane”,你会看到在摄像机旁边有一个蓝色长方形。

    这个是我们刚刚加到场景(scene)中的飞机,我们接下来应用我们已经得到的纹理。

    选中“Hieararchy”面板中的“Plane”,在“Inspector”面板中的顶部一个text filed中 的叫“Plane”输入

    “Background”. 这样操作改变这个对象的名字,这样就是让你怎样重新命名一个对象。有时候不能

    命名成功,你需要再点击下其它的文本框才行。

     把这个“background”纹理(texture)从“Project”面板中拖拽到"Hierarchy"面板中的“Background”

    对象上。在“Inspector”面板中设置这个飞机(刚才的重新命名Background)的位置(position)为

    [4, 0, 20],Rotation(旋转)为 [90, 180, 0],Scale(缩放)为[10, 1, 5],这就是你在“Scene”

    面板中面对着相机这个飞机的模型和选择,这样这个相机将看到这个飞机作为游戏的背景。

     

     

     现在,为了清楚地看到我们所拥有的场景,我们需要一些光(就像在现实生活中),在菜单栏中选择

     “GameObjectCreate otherDirectional Light”,这将会发一些光在你的场景中。在“Hierarchy”

    面板中选择“Directional Light”,并在“Inspector”属性面板中设置Position位置坐标为【0,0,0】.

    现在我们有了所有的设置和场景的背景,现在是时候添加一些对象并让它们动起来!

    5.添加3D对象到场景(Scene)

     从菜单栏中选择“GameObjectCreate otherCube” ,这样添加一个立方体到你的场景中。这将是这个游戏

    的玩家,所以将它重名为“Player”.设置位置为【-15,5.3,8】.你将会看到这个立方体出现在“Game”面板的屏幕

    中的左侧--这也是我们的飞机开始启动的地方,并且将要在海面上移动到达屏幕的另一端。

     现在让我们导入飞机模型!我们将使用免费的3D模型 ,Reiner网站上免费发布的 Reiner`s Tilesets(也看看它的模型的许可http://www.reinerstilesets.de/lizenz/)。开始,下载他的飞机模型(http://www.reinerstilesets.de/zips3d/mesh_airplane_linnen.zip)并对其进行内容进行解压缩。

     在"Project"面板里点击右键并选择"Create/Folder",重命名这个文件夹为“Models”.从你刚才解压缩的飞机模型文件夹中拖拽文件“airplane_linnen_mesh.obj”,并把它放到“Project”面板中的“Models”文件夹中。

     然后右键点击这个“Models”文件夹并选择“Create/Folder”,并重命名这个新的子文件夹为“Textures”,这里我们可以保存应用到这个模型的纹理文件。拖拽文件“airplane_linnen_tex.bmp”并把它放到最近新建的“Textures”文件夹中。

     下一步,在“Hieratchy”面板中选中这个“Player”对象,然后观看这个右上角的“Inspector”面板,

    那个"Mesh Filter"选项过滤器是条状的设置你的项目对象的几何(现在它设置一个立方体的几何形状);

    在子目录下里面有个叫“Mesh - Cube”的一行,你会发现一个点在中间的小圆圈,并点击它 ——

    这将打开一个弹出窗口,你应该双击这个飞机模型,这将改变的的几何对象为一个飞机。

      现在一个精致的细节——飞机看起来有点搞砸了。我没有3D专家,但我发现了怎样在Unity中修复它:在“Project”面板中选中“airplane_linen_mesh”,然后在"Inspector"面板中找到“Normals”选项并选择“Calculate”,然后向下滚动滑动条并点击“Apply”(应用)按钮。

      酷,现在你在场景中看到一个流畅的飞机!让我们来使用它的纹理:在你的“Project”面板中拖拽“airplane_linnen_tex”纹理文件,并把它放到“Hierarchy”面板中的“Player”. Unity 自动应用这些纹理到我们的场景中的飞机模型上。

      最后给飞机润色:为“Player”对象设置 Rotation(旋转)为 [0,90,350],Scale(缩放) 为[0.7,0.7,0.7],这将对这个飞机进行平面旋转和缩放,使它看起来像刚飞过海面。下面将要使我们飞机飞!

    6.使用C#开始Unity3D编程

     正如我们已在Unity的Build Settings 对话框中所看到,Unity 可以创建你的项目到一个 Wii game,一个iPhone game,独立的Mac game,等等。因为U,nity就是如此无所不能的中间层,你只需要一次编程你的游戏。一旦它需要某种或不同的构建就可以将它转换为特定于平台的代码。

     奇怪的是,在Unity中编程你将使用C#(而非Objective -C!),当Unity生成你的Xcode项目中时,它将C#代码自动翻译成特定于平台的代码。

      在“Project”面板中单击右键并选择“Create/Folder”,重命名这个新的文件夹为“Class”.右键点击这个“Class”文件夹并选择“Create/C Sharp Script”,并重命名新文件为“PlayerClass”. 在"Project"

    面板中单击右键并选择“Sync MonoDevelop Project” - 这将打开 MonoDevelop IDE- 只是你可以在C#下编程的IDE.

    注意:MonoDevelop是从 Linux中移植过来的程序,正如你所看到的用户界面皮肤,称为Gnome(侏儒),所以如果它不时地崩溃是正常的,尤其是当你尝试改变窗口的大小。如果出现这种情况,只需通过点击“Sync MonoDevelop Project”重新启动。

     以上是MonoDevelop GUI的三大块:

    1.浏览你的 MonoDevelop项目-在in Assets/Class目录下你将会发现 PlayerClass.cs文件。

    2.目前开源类概况。

    3.编辑区——有一些语法高亮显示和代码自动完成功能,将有助于你的编码。

    浏览你的项目找到 PlayerClass.cs文件,在编辑器中双击打开它。确认类看起来如下:

    using UnityEngine;
    using System.Collections;
    public class PlayerClass : MonoBehaviour {
     
    	// Use this for initialization
    	void Start () {
     
    	}
     
    	// Update is called once per frame
    	void Update () {
     
    	}
    }

     这个“using”条款包括库和框架,UnityEngine库给你些比如能让你访问iPhone的加速器,键盘输入和其他方便的东西之类的。

     你可以定义自己的新类并继承MonoBehaviour,它给你提供了很多免费的东西:当给定事件被触发时你可以覆盖被回调的一长串清单方法。

     只需几行在你空启动和更新方法下面 -这是2个重要的事件。

       *Start 被调用在你的对象出现在场景的适合,所以你可以进行你的初始化(类似于viewDidAppear:

        in UIController)。

      *Update 被调用在每当每帧渲染(即可能是30​​,60或100次每秒,你永远不知道多久),这里就是做你的动作,游戏逻辑等

      现在让我们却换回Unity一会。我们要使飞机飞过海,当它在场景的右侧消失后而在左侧再次出现。让我们来测量下我们需要将飞机移动到距离左边什么位置。在"Scene"面板的右上角,你会看到方向轴 Gizmo- 点击

    这个X手柄(它是一种红椎,我将管它叫手柄):

     这个将选择场景和使它水平朝向你。再次点击在这个gizmo左边的手柄--这将旋转周围的场景,你可能需要点击左侧的手柄几次,直到场景看起来像这样子:

     现在你可以使用鼠标在场景中滚动放大/缩小,并让它在“Scene”面板中适应大小。确保在上方的工具栏中的移动工具被选中,并在“Hierarchy”面板中选择这个“Player”.

     现在你看到一个新的gizmo(发明)出现,连接在飞机上一个绿色和一个红色的箭头。现在你可以拖动箭头轴,它们将使飞机沿着箭头的方向移动:

     你需要做的是点中红色箭头(横轴),并拖拽飞机到右边知道超出“Game”面板下方。

     开始在“Scene”面板中拖动,同时观看“Game”面板中的表现。把飞机停留在场景可视范围之外,并观看它在“Inspector”面板中的position(位置)。position 的X轴应该在“17.25”附近,-所以这是在场景右边的边距,你可以拖拽飞机向左移动距离左边距坐标为“-17.25”,所以我们将使用“18”和“-18”来包裹飞机的飞行。把飞机带回到原来在场景左侧的位置。

      切换回 MonoDevelop,在PlayerClass.cs文件中坐如下改变:

    //just after class declaration line
    public float speed;
     
    //inside the Update method
    if (transform.position.x > 18) {

    //get new speed
    	speed = Random.Range(8f,12f);
    	transform.position = new Vector3( -18f, transform.position.y, transform.position.z );
    }		
    transform.Translate(0, 0, speed * Time.deltaTime);

      正如你所猜想那样,你刚才在你的类中定义了一个公共类属性叫做“speed”,但是Unity的特别之处是所有的公共类属性都可通过这个“Inspector”面板访问!

      所以你可以在IDE中设置你类中属性的值,你可以监视你的属性值当游戏一边实时运行时。它是多么的酷啊!

     这个“transform”变量是针对每场游戏对象(场景中的一切都是一个游戏对象)处理对象空间位置:旋转,位置,缩放等的属性。因此每次Update的调用是为了变换这个对象的位置,一遍它移动到场景的右边。

      我们不能只是每次调用 Update时候设置变量让这个飞机移动,因为没有人知道每秒到底有多少次被实际调用。 相反,我们定义速度为每秒为单位,从上次调用更新所进过的时间分离出速度(Time.deltaTime).通过这种方式,对象总是独立于当前帧速率以相同速度移动。

     调用翻转有三个值--在每个轴上它有翻转。  你可以注意到 我们移动飞机在z轴上(第三个参数)-我们只能这么做因为我们要在场景中旋转这个飞机,所以翻转Z轴把它移动到玩家角度的右侧。

      查看"if"语句- 我们检查 如果transform.position.x大于18(为什么?)。如果如果是的话,我们将飞机的位置设置为相同的数值坐标但是“-18”在X轴。我们使用新建Vector3(x,y,z)设置坐标位置--我们将会使用大量的这些vectors为所有的定位;你注意到我们设置一个随机速度(8~12),这只是让飞机更随机的移动变得更有趣一些。

     这是我们准备看这个飞机移动!

     切换回Unity.从“Project”面板中拖动这个“PlayerClass”文件到“Hierarchy”面板上的“Player”对象上--这样你就附加一个类到一个游戏对象上。选中“Hierarchy”面板中的“Player”并观看右侧的“Inspector”面板-- 你将会在下方看到一个新的选项出现叫做“Player Class(Script)”,在那里你可以看到新的公共属性!“Speed”,为它设值“12”。

     ok ,准备好了。点击Play 按钮!你可以同时在"Scene"和“Game”面板中看到飞机飞来飞去,从右边飞出从左边飞回来。同时可以注意到在“Inspector”面板中Position的X轴也是变化的 -它向你显示在任何给定的时刻飞机在哪。当然飞机飞行的每时每刻速度都是随机变化的。

    一旦大功告成享受惬意时,不要忘记再次点击Play按钮停止这个游戏。

    需要休息吗?没问题-只需要保存你的Unity项目,你可以稍后再开启。当你带个一个Unity项目时候,它默认打开一个空的场景。为了加载你正在工作的场景- 双击在“Project”面板中的“LevelScene” -现在你可以继续工作了。

    7.跳动的鲨鱼

     下载并解压缩鲨鱼模型(http://www.reinerstilesets.de/zips3d/mesh_shark.zip)。同样,拖拽这个“shark.obj”文件到“Project”面板中的"Models"文件夹中,拖拽“sharktexture.bmp”文件到“Models/Textures”文件夹下。

     从菜单栏中选择“GameObject/Create other/Capsule” - 在“Hierarchy”面板中重命名这个“Capsule”对象为“Shark”.

    在你的“Project”面板中拖拽“sharktexture.bmp”纹理文件,并把它放到“Hierarchy”面板中的“Shark”上.在“Inspector”面板中的“Mesh Filter”一项中点击有一点在中间的圆圈,在弹出的窗口中双击这个Shark 模型。现在你应该在“Scene”和“Game”面板中看到Shark的几何形状。

     从“Project”面板中Models/Textures文件夹下拖拽“sharktexture”到“Hierarchy”面板中的“Shark”对象上- 这会给你的鲨鱼一个凶残的嘴和一对邪恶的眼睛!--我已经准备想轰炸它!

     确认“Shark”对象被选中,然我我们在"Inspector"面板中设置以下属性::Position – [20, -3, 8], Scale – [1.2, 1.2, 1.2] –这将把鲨鱼正好放到摄像机可见范围的右侧。--它将会从这里朝着场景屏幕的左端开始移动。

    现在我们希望这个鲨鱼与我们的炸弹相撞(通过爆炸,轰轰轰)。我们希望这个鲨鱼的对撞机或多或少的匹配这个鲨鱼的几何形状。正如你所看到的那样在场景中的鲨鱼里面有个绿色的胶囊形状(capsule).这个就是鲨鱼的对撞机(collider).让我们用它匹配这个邪恶鲨鱼的型体。

     在“Inspector”面板中找到这个“Capsule Collider” 并进行如下设置:Radius to “1″, Height to “5″, Direction “X-Axis”, Center to [0, 0, 0].现在你可以考到胶囊对撞机(capsule collider)已经旋转过并且或多或少的更加匹配鲨鱼的型体!

      最后,在“Project”面板中的“Models”文件夹下选中“shark”模型,然后在"Inspector"面板中找到“Normals”选项并选择“Calculate”,然后向下滚动滑动条并点击“Apply”(应用)按钮。。

      在“Project”面板中单击右键并选择“Create/Folder”,右键点击“Class”文件夹并选择“Create/C Sharp Script”,并重命名新文件为“FishClass.”. 在"Project"

    面板中单击右键并选择“Sync MonoDevelop Project”。MonoDevelop(编辑器) 就会弹出来。打开这个“FishClass.cs”文件并在里面添加如下代码:

    using UnityEngine;
    using System.Collections;
     
    public class FishClass : MonoBehaviour {
     
    	public float speed = 6f;
     
    	// Update is called once per frame
    	void Update () {
    		if (transform.position.x < -30 || transform.position.x > 30) {
    			//turn around
    			transform.Rotate(new Vector3(0,180,0));
    			transform.Translate( new Vector3(-10, -transform.position.y + Random.Range(-4,-1),0) );
     
    			//get new speed
    			speed = Random.Range(6f,10f);
    		}
    		transform.Translate( new Vector3(-speed*Time.deltaTime,0,0) );
    	}
    }


     这和我们所拥有的飞机非常相似。我们有个速度属性(单位为每秒)并在Update事件中处理我们使用transform.Translate来移动这个鲨鱼。

     注意这次我使用:

    transform.Translate( new Vector3(x,y,z) );

     这只是用来演示其中一些方法可以采用不同的参数 -然而分别通过3个值和1个矢量效果是相同的。 

      现在,让我们来看看鲨鱼当到达屏幕的范围做什么(-30~30的范围情况下,所以有一个当鲨鱼在屏幕之外的时刻时,你不能很轻易伏击当它进入时候)。

     当鲨鱼到底左右边界时它会转身朝着边界移动一下和改变速度。这样它只是来来回回,连续来回。

     调用transform.Rotate(new Vector3(x,y,z)),通过给定的值明显的绕轴选择物体,transform.Translate(new Vector3(x,y,z))你上次已经知道了。

     很容易!切换回Unity并把这个“FishClass”脚本 放到“Hierarchy”面板中的“Shark”对象上。现在点击Play按钮:你可以看到巨大的鲨鱼来来回回等待被轰炸。干得好!

    8.添加小鱼

     让我们做同样地步骤对我们的小鱼对象。我要把它变成一个很好的快速参考列表:

     1.下载并解压ClownFish model.

     2.拖拽“mesh_clownfish.obj”到“Project”面板中的“Models”文件夹里,并把“clownfish.bmp”放到“Models/Textures”文件夹下。

     3.选择“GameObject/Create other/Capsule”并在“Hierarchy”面板中重命名这个“Capsule”为“ClownFish”。

     4.点击“Mesh Filter”下的带圆点的圆圈按钮,并从弹出框中双击这个clownfish几何体。

     5.拖拽这个“clownfish”模型纹理到 “Hierarchy”面板的“ClownFish”对象上。

     6.当选中“ClownFish”对象时,在“Inspector”面板中改变以下这些属性:

    • Position to [-20, -1, 7]
    • Rotation to [0, 180, 0]
    • Scale to [0.4, 0.3, 0.3]

      7.从“Project”面板中拖拽“FishClass”脚本文件到“Hierarchy”的“ClownFish”对象上。这将指派相同的通用的fish class到这个clownfish身上。

      8.选择在"Project"面板中“Models”文件夹下的“mesh_clownfish”,然后在“Inspector”面板中找到“Normals”并选择它的“Calculate”选项,然后滑动到下方点击"Apply"按钮。

      点击Play按钮并观看发生了什么-- 现在你拥有两个移动的鱼而无需编写任何额外的代码!

    一切很完美 - 鱼类游来游去,飞机海平面飞行。我们需要一些轰炸。

    9.设定炸弹

     下载并解压缩这个Can model.同样,拖拽这个“colourcan.obj”文件到“Project”面板中的"Models"文件夹下并把“cantex.bmp”文件放到“Models/Textures”文件夹下。

     从菜单栏中选择“GameObject/Create Other/Capsule”,重命名这个对象为“Bomb”.从这个 “Mesh Filter”弹出框中双击这个炸弹罐几何体。拖拽“Project”面板“Models/Textures”文件夹下的“cantex”纹理到“Hierarchy”面板中的“Bomb”对象上。 在“Inspector”面板中点击 “Capsule collider”中的这个按钮 ,出现弹出框:

     在出现的弹出框中,选择“Reset” - 这种方式 对撞机(collider)将自动分配集合尺寸。酷吧!

     接下来选择“Project”面板“Models”文件夹下的“colourcan”模型,然后在“Inspector”面板中找到“Normals”并选择“Calculate”选项,然后滑动到下方点击"Apply"按钮。

     现在让我们加入一些新的东西!再次选中这个"bomb"对象,并在“Inspector”面板中找到“Capsule Collider”(胶囊对撞机)中选中这个“Is Trigger”复选框!选中这个可以让炸弹对象与其他对象碰撞是触发事件。

      但要做到这一点,我们还需要分配刚体(Rigid Body)炸弹(至少一个碰撞对象需要有一个刚体) 。从菜单栏中选择“Component/Physics/Rigidbody”(在“Hierarchy”面板中的Bomb对象必须选中)。

     一旦你这样做,一个新的选项带出现在“Inspector”面板中叫做“Rigidbody”。取消选中“Use gravity”(使用重力,我们不会利用重力),并勾选上“Is Kinematic”这样可以控制编程机身。这是所有我们需要启动的碰撞内容。

     10.预制游戏对象

      请记住“Hierarchy”面板显示的是目前场景中有什么,“Project”面板中持有你所有的对象?这不得不做一些事情来达到我们的目标 -- 有多少炸弹装上飞机,它们将释放入海。

     我们将做什么 ——我们将预制游戏(它将准备设置场景显示),但是我们不会把它添加到场景,我们要实例化(或者克隆如果你是个科幻小说迷)这个“prefab”(预制)成一个真正的活动场景中的游戏对象。

     在"Project"面板中单击右键并且选择“Create/Folder”,重命名它为“Prefabs”。右键单击“Prefabs”文件夹并且选择choose “Create/Prefab”.重命名这个新建的prefab为“BombPrefab”。注意这个小立方体的Icon是白色的——这表示一个空的预制。

     现在——拖拽“Hierarchy”面板中的"Bomb"到“Project”面板中的“BombPrefab”上。注意这个立方体的icon现在变为蓝色——意味着是一个完整的预制,准备被克隆。同样重要的——现在观看“Hierarchy”面板——“Bomb”字体变成了蓝色——这意味着现在这个对象是一个预制的实例。

     现在,我们有自己的炸弹集合,我们并不需要场景中原来的炸弹——右键单击“Hierarchy”面板中的"Bomb"对象并选择"Delete"。

     让我们Coding! 切换回MonoDevelop编辑器,并打开PlayerClass.cs文件,在“speed”属性声明厦门添加:

    public GameObject bombPrefab;

     你猜到了吗?在这个属性中我们将对BombPrefab保留引用并且按照我们的意愿行事。注意属性的类型为“GameObject”,正如我早前说过的那样游戏中所有的东西都是一个GameObject(很像Cocoa中的NSObject),所以它是安全的为任何事物设置这样的类型。

      现在切换回Unity并选择“Hierarchy”面板中的“Palyer”对象。正如你期望那样,在“Inspector”面板中在“Player Class(Script)”下有一个新的属性“BombPrefab”。让我们设置它的值:从“Project”面板中拖拽“BombPrefab”到“Inspector”面板中叫“None(GameObject)”上边——现在这个字段表示BombPrefab预制附加了值。

      我们将需要为子弹创建一个C# class,在“Project”面板中“Class”文件夹上右键单击并选择“Create/C Sharp Script”,重命名为“BombClass”。右键单击并选择“Sync MonoDevelop Project”——MonoDevelop工具弹出。打开BombClass.cs并用下面代码替换内容:

    using UnityEngine;
    using System.Collections;
     
    public class BombClass : MonoBehaviour {
    	private float ySpeed = -4f;
     
    	// Update is called once per frame
    	void Update () {
    		transform.Translate( new Vector3(0f, ySpeed*Time.deltaTime, 0f) );
    		if (transform.position.y < -11) {
    			Destroy(this.gameObject);
    		}
    	}
    }

     到目前为止这非常类似于我们所做过的一切——我们translate对象的每一帧,当超出屏幕边界时候做出适当的反应。在这个炸弹的事例中,我们只是要销毁对象 ,因为我们总是可以从bomb  prefab(炸弹预制)中制造新的。

     在代码中注意到 “this”指的是这个C# bomb class,而这个gameObject属性指的是在场景中的对象,所以我们销毁在场景中的对象并把它链接到所有的组件上。  在第二部分中,我们将会掉的游戏对象的层次结构,当你访问组件附加到对象的编程。

     

    11.轰炸鲨鱼

     你一直在等待最后一部分——无极的暴力:

     打开PlayerClass.cs文件,在Update方法的末尾添加:

    if (Input.anyKeyDown) {
    	GameObject bombObject = (GameObject)Instantiate(bombPrefab);
    	bombObject.transform.position = this.gameObject.transform.position;

    }

     让我们解释这些代码行::

     1.Input是让你存取键盘,鼠标,加速器和触摸的类。 当一个键被按下时 Input.anyKeyDown是 true,这只发生一次。,即按钮第一次按下时。然后直到另一个键被按下时Input.anyKeyDown 再次是 false。anyKeyDown实际上是一个方便的抽象对象——它实际上是true当一个鼠标按钮被点击时,或键盘按键按下或iPhone屏幕上的触摸点击。

     2.(GameObject)实例化(bombPrefab)是个神奇的线,冲一个预制(prefab)创建一个实例,并将其添加到场景中。

     3.最后我们设置炸弹的position位置跟飞机使相同的。

     酷——我们创建了我们的炸弹当玩家点击屏幕时候,它开始往下掉并且超出屏幕时它会自己销毁。

     让我们尝试一下它!切换回Unity并点击Play按钮——现在如果你在“Game”面板中点击,你会看到一个炸弹在飞机的位置点上创建。

      点击很多次——很多炸弹被创建。你应该听到炸弹的声音。但炸弹降落不下来!为什么呢?你已经能自己找到问题的解决方法吗?答案稍后公布。

    我希望你想通了,但这里的问题是:你尚未分配这个BombClass脚本到这个 Bomb Prefab(预定炸弹身上),这是为什么降落不下来的原因。在“Project”面板中的"Class"文件夹下拖拽BombClass文件到同样面板下的“Prefabs”文件夹中的“BombPrefab”文件上。在“Inspector”面板中,如果你看到Bomb Class Script框请勾选住。现在再次点击Play按钮。

      现在还不是十全十美——这些鲨鱼当你打它们时不会死。既然我们已经配置了(colliders)对撞机和刚体组件的炸弹,我们只需要添加代码来响应碰撞。切换回MonoDevelop编辑器中,并添加如下代码到BombClass类中:

    void OnTriggerEnter(Collider obj) {
    	if (obj.gameObject.name == "Shark") {
    		//reset shark
    		obj.gameObject.transform.rotation = Quaternion.identity;
    		obj.gameObject.transform.position = new Vector3(20f, -3f, 8f);
    		Destroy(this.gameObject);
    	}
    }


     让我们再次解释这些代码行:

      1. OnTriggerEnter是个方法调用,当这个刚体附着与另一个刚体碰撞时,第二个刚体作为一个参数传递。

      2.这里,我们检查炸弹命中的对象是否是“Shark”;

      3.如果这个鲨鱼被命中,然后第一对象旋转复位。

      4.第二,我们设置鲨鱼回到原来的位置。

      5.最后我们调用 destroy this.gameObject方法,使炸弹从场景中消失。

      很容易!难道不是吗?这是所有你需要的——切换回Unity,运行你的游戏! 命中鲨鱼消失,新的鲨鱼又进来了。

      你可以选择菜单栏 “File/Build&Run”,然后当Xcode弹出框出现,点击“Run”,现在你拥有了iPhone上的游戏! 

    源代码如下:sample project

    在本系列的第2部分,我们要提升一下档次,使这个游戏真的富有挑战性和乐趣!

     如需转载,请注明翻译出处 http://www.cnblogs.com/jiangshiyong/p/3074917.html

  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/jiangshiyong/p/3074917.html
Copyright © 2011-2022 走看看