Flappy Bird 实例new_第1页
Flappy Bird 实例new_第2页
Flappy Bird 实例new_第3页
Flappy Bird 实例new_第4页
Flappy Bird 实例new_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Tutorial: How to Make Flappy Bird in Unity3D 创建一个工程 菜单File-New Project 管理你的工程 菜单Assets-Create-Folder,创建四个文件夹 “Prefabs”“Scenes”“Scripts”“Textures”. Prefabs In Unity, a Prefab is an object that can be reused and created such as bullets, enemies, or walls. Scenes A scene is like a level of a game. Scri

2、pts This folder will hold all the code. Textures All the images used in the game. In 2D gaming, these images are called “Sprites”.导入图片资源 方法一:如图所示 方法二:Assets-Import new asset选择要导入的图片设置背景 检查一下,将导入的图片都放到Textures目录下面 打开Textures目录,然后选择background图片,将其放到场景中, 方法一:拖动图片background到层次视图 方法二:拖动图片到scene视图 选中层次视图中

3、的background,然后看Inspector视图里边,position是0,0,0,scale为2.5,2.5,1;设置角色 同样的方法,从Project视图,Assets的Textures目录选择player图片,将其放到场景中,然后调整起position为(-2,1,-1) 注意这里z为-1,可保证小飞机在背景图片前面 接下来,给小飞机添加刚体组件RigidBody2D组件,具体方法为, 从层次视图中选中player,然后点击菜单Component,选择Physics2D,选择RigidBody2D 注:刚体组件赋予对象重力等物理属性。 此时点击unity的播放按钮,可以看到小飞机自由

4、下落。角色控制 对角色进行玩家操作控制 Project面板选中Scripts文件夹,Create一个javascript脚本文件,名为Player.js#pragma strictvar jumpForce = Vector2(0,300);function Start () function Update () if (Input.GetKeyUp(space)rigidbody2D.velocity = Vector2.zero;rigidbody2D.AddForce(jumpForce); 变量jumpForce: stores the force applied to the pla

5、yer when we jump. 把Player.js脚本赋予Player游戏对象 点击unity播放按钮,游戏运行,小飞机下降,点击空格键,小飞机往上跳一下。创建障碍物 从Project视图,Assets的Textures目录选择rock和rockdown图片,将其拖放到场景中, change their X and Y scales to be 2.5. 调整这对图片的位置,比如分别为(12,5,0)和(12,-5,0),如下图所示 整理障碍物 创建一个空游戏对象,点击GameObject菜单,选择Create Empty,层次视图中出现一个名为GameObject的空对象,改名为Roc

6、kPair 在层次视图中,将rock和rockdown拖放到RockPair上,使其成为rockpair的下层。障碍物的移动 给RockPair添加RigidBody2D组件,选中Is Kinematic选项(rockpair对象将不会因重力下降) 在Scirpts创建一个脚本Obstacle.js,并将其赋予对象RockPair#pragma strictvar velocity = Vector2(-4, 0);function Start () rigidbody2D.velocity = velocity;function Update () 点击untiy播放按钮,将看到障碍物从屏幕

7、右侧往左侧移动通过游戏过程中产生障碍 制作障碍物prefab(预设) drag the RockPair Object into the Prefabs folder. This turns RockPair into a Prefab Delete the RockPair object that is in the scene. 场景中添加一个空对象(create empty),改名为Scripts,并为其创建一个脚本Generate.js#pragma strictvar rocks:GameObject;function Start () InvokeRepeating(CreateO

8、bstacle, 1f, 1.5f);function Update () function CreateObstacle()Instantiate(rocks); the InvokeRepeating method. This will call a specific function once every several seconds. The first parameter is a string with the name of the method to call. The second is the number of seconds to delay these repeat

9、ed calls. And the third parameter is the number of seconds between method calls. the CreateObstacle method, we use Instantiate, a method that will generate a new prefab to the scene. 将Generate脚本赋予Scripts 层次视图中选择Scripts对象,其Inspector视图如右上图 通过拖拽操作将Generate脚本组件的Rocks变量赋值为RockPair预设,右下图 点击播放按钮,看效果 还需要碰撞检

10、测 碰撞器collider 碰撞处理碰撞检测处理 添加碰撞器Collider 层次视图选择Player对象,添加碰撞器 菜单Component, 选择Physics 2D,选择Box Collider 2D Project面板,选择Prefabs文件夹中的RockPair预设,点击右边小三角,打开,然后rock和rockdown逐一添加Polygon Collider 2D组件 点击播放按钮,看碰撞效果 小飞机碰到障碍,游戏重新开始 修改Player.js脚本#pragma strictvar jumpForce = Vector2(0,300);function Start () funct

11、ion Update () if (Input.GetKeyUp(space)rigidbody2D.velocity = Vector2.zero;rigidbody2D.AddForce(jumpForce);/ Die by being off screenvar screenPosition = Camera.main.WorldToScreenPoint(transform.position);if (screenPosition.y Screen.height | screenPosition.y 0)Die();/ Die by collisionfunction OnColli

12、sionEnter2D(other:Collision2D)Die();function Die()Application.LoadLevel(Application.loadedLevel); 点击播放按钮,运行看效果 考虑继续完善 障碍的位置可随机调整 计分障碍位置随机 考虑修改每个障碍位置的y坐标 在Obstacle脚本的Start()函数中添加一行transform.position.y += Random.Range(-2,2);计分 如何计分? 撞到障碍之前走的越远越好 成功经过障碍的数目 具体实现 每产生一个障碍,记一分 计时,每隔1.5秒记一分 修改Generate脚本#pra

13、gma strictvar rocks:GameObject;var score=0;function Start () InvokeRepeating(CreateObstacle, 1f, 1.5f);function Update () function CreateObstacle()Instantiate(rocks);score+;function OnGUI () GUI.color = Color.black;GUILayout.Label( Score: + score.ToString(); OnGUI()函数 OnGUI is called for rendering a

14、nd handling GUI events. your OnGUI implementation might be called several times per frame (one call per event)如何继续完善? 及时销毁无效的障碍 添加多种障碍 添加游戏开始界面,添加新的关卡 关于销毁障碍 在Obstacle.js中的Start()函数中,加入Destroy(gameObject,6)即可 添加多种障碍在Generate.js脚本中, 将var rocks:GameObject;改为var rocks:GameObject; Instantiate(rocks);改为I

15、nstantiate(rocksRandom.Range(0,rocks.Length); 在Unity编辑器中,修改rocks数组变量,并进行赋值即可。 添加一个新的场景,并保存命名为Title 在场景中添加必要的背景图片 在场景中创建一个空的游戏对象(Create Empty),改名为Title 创建一个脚本,改名为title,并让它成为Title对象的脚本组件,编辑title.js,添加如下函数:function OnGUI()if (GUI.Button(Rect(Screen.width/2,Screen.height/2,50,20),Start)Application.LoadLevel(s1);if (GUI.Button(Rect(Screen.width/2,Screen.height/2+3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论