Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台) |
您所在的位置:网站首页 › 重力小球游戏玩法视频教程 › Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台) |
本文中Flappy Bird基于Unity2019.4.7f1完成,源工程已部分代码改为适配安卓
这是一款简单又困难的手机游戏,游戏中玩家必须控制一只胖乎乎的小鸟,跨越由各种不同长度水管所组成的障碍。上手容易,但是想通关可不简单。Flappy bird 于2013年5月在苹果App Store上线,2014年2月份在100多个国家/地区的榜单一跃登顶,尽管没有精细的动画效果,没有有趣的游戏规则,没有众多的关卡,却突然大火了一把,下载量突破5000万次。 一、工程创建和素材导入在Assets中创建不同的文件夹,存储声音、图片、脚本、材质素材。 二、添加背景创建Quad,创建Material,bg,back,pipe,bird,整个场景设置图1所示。其中材质的创建得选择 关键技术: 小鸟飞行动画由三幅图组成,连续播放三幅图可以看出小鸟的翅膀在动。需要修改offset参数实现。 "_MainTex"是主要的漫反射纹理; "_BumpMap"是法线贴图 "_Cube"是反射cubemap.(立方体贴图) 四、随机生成管道的位置修改管道的y值 随机值范围 Random.Range(a,b);//也就是说保持x和z不变,y是一个上下变化的值 public class pipe : MonoBehaviour{ void Start(){ RandomGeneratePosition(); } public void RandomGeneratePosition(){ float pos_y=Random.Range(-0.2f,0.2f); this.transform.localPosition=new Vector3(this.transform.localPosition.x,pos_y,this.tranform.localPosition.z); } } 五、添加小鸟、管道碰撞器小鸟的碰撞器 地面碰撞器 当小鸟走到bg1时,修改bg的位置,放置在bg2前面,依次循环。创建bg为一个预制体,根据这个预制体创建bg1,bg2.修改坐标。创建游戏管理器存放共享的变量、分值、ui等信息。新建一个脚本GameManage,挂在摄像头上。在这个脚本中,定义了一个共享的第一个bg位置,也就是最前面的bg的位置,同时,创建了一个共享单例。 在小鸟的脚本中,鼠标左键按下后,有一个向上的速度。小鸟的重力必须加上。
在游戏开始时,小鸟没有速度,没有重力。是停止的,在鼠标右键点击后,给小鸟添加上速度和重力,在飞行过程中,若小鸟撞到管子,就掉落,鼠标左键按下去应该没有作用,游戏结束。所以,需要给游戏设定几种游戏状态。 设定函数,让其满足设置小鸟的速度和重力。 在Main Camera上,添加audio sourse 组件,添加声音文件sfx_swooshing,取消Loop 得分的声音。在MoveTrigger的时候,才会有声音。于是在Pipe1和pipe2上添加audio sourse声音文件sfx_point.同样在脚本中添加 audio.Play();撞到柱子的时候,会有声音,于是在pipe_up,pipe_down都添加audio sourse,添加sfx_hit声音。取消play on awake。在pipeupordown脚本中,trigger过程中,audio.Play() 死亡的声音 在GameManage脚本,对菜单显示及更新分数
分别使用 PlayerPrefs.GetInt(key); PlayerPrefs.GetFloat(key); PlayerPrefs.GetString(key); 获取键值对应的数值。 PlayerPrefs.SetInt(key,value); PlayerPrefs.SetFloat(key,value); PlayerPrefs.SetString(key,value); 设置键值对应的数值。 PlayerPrefs.DeleteKey(key); 删除键值。 PlayerPrefs.HasKey(key); 判断键值是否存在。 值得注意的是,键值对应的数据的默认值为数据类型的默认值。 比如当我们尝试获取一个未曾使用的Key,其返回值可能是:0,0F 或者 "",而不是null。 但是unity却允许存入默认数值,所以在读取数值的时候,返回默认数值的情况有两种,一种是因为不存在该Key值,另一种是因为你存入了默认值。 PlayerPrefs的储存位置在Mac OS X上PlayerPrefs存储在~/Library/PlayerPrefs文件夹,名为unity.[company name].[product name].plist,这里company和product名是在Project Setting中设置的,相同的plist用于在编辑器中运行的工程和独立模式 (打开Find,按住Option键,点击“前往 →“资源库”,就可以找到Preferences文件夹。). 在Windows独立模式下,PlayerPrefs被存储在注册表的 HKCU\Software[company name][product name]键下(打开“运行”输入regedit打开注册表),这里company和product名是在Project Setting中设置的. 是持久本地化存储 using UnityEngine; using System.Colliections; public class PlayerPerfsExample:MonoBehaviour { void Example() { //设置键值和值 PlayerPerfs.SetInt(“keyInt”,10); PlayerPerfs.SetFloat(“keyFloat”,10.2f); PlayerPerfs.SetString(“keyString”,”lmzqm”); //获取键值如果不存在该键值就返回默认值0 PlayerPerfs.GetInt("keyInt",0); PlayerPerfs.GetFloat("keyFloat",0); PlayerPerfs.GetString("keyString","0"); PlayerPerfs.DeleteAll();//删除所有键值 PlayerPerfs.DeleteKey("keyInt");//删除某个键值 bool exist = PlayerPerfs.HasKey("keyInt");//判断是否存在键值 } 3.发布到安卓时需要修改的地方将脚本中的: if(Input.GetMouseButton(0))改为: if(Input.touchCount==1)//表示手指单点触摸屏幕下载链接:flappybird |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |