Unity怎么用C#做一个罪恶都市关卡选择器的界面,类似于愤怒的小鸟罪恶都市关卡选择器

&&&&&& 在Unity的脚本编辑中,可以使用命令Application.LoadLevel(string);来进行重新加载场景,其中string参数为需要加载的场景名。
&&&&&& 当需要选择关卡的时候,去选择加载不同的场景就可以实现关卡功能。当然如果游戏占用内存高的话,就需要自动生成关卡的算法。
本文已收录于以下专栏:
相关文章推荐
目标:用Plane组件制作关卡1的背景
之前我们都是在用GUI Texture在制作游戏背景,但是它的渲染效率特别的低,所以一般制作2D游戏时,游戏背景、游戏人物、道具等都是用Plane来做...
(1)固定关节
Fixed Joints restricts an object’s movement to be dependent upon another object. This is so...
动态下载关卡是很多web游戏必备的内容,玩多少下多少是合理的解决方案。    这里首先要解决的就是如果制作用于下载的资源。为此,Unity提供了BuildPipeLine,这是一个编辑器类,因此只能放...
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/
各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
今天想和大家分享的是目前在移动平台上较为流行的关卡系统,关卡系统通常是单机手机游...
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unity教程 | 手把手教你做一款《愤怒的小鸟》(下)
在这篇教程中,我们实现了弹弓与弹子之间的物理交互。今天这篇文章将继续讲解下半部分内容,为弹子添加拖尾效果,加入弹子与障碍物的交互,加入相机跟随效果及游戏胜负判定。
最终游戏效果如下:
添加弹子拖尾效果
在层级视图选中弹子对象,在检视视图中为其添加Trail Renderer组件:
新建C#脚本命名为Bird,将该脚本添加到弹子对象上。在Start函数中设置弹子的初始状态,放大弹子的碰撞器以方便玩家点击,并控制拖尾效果是否显示。BirdState是用来标志弹子状态的枚举,共有飞行前及飞行中两种状态。Start函数代码如下:
在脚本中添加FixedUpdate函数,来检测弹子是否已被弹弓射出,如果已被射出且弹子速度非常小,就表示弹子已经落地。落地两秒后从场景中移除弹子对象。代码如下:
最后是供弹弓脚本调用的OnThrow函数,在弹子被射出时将其碰撞器设为原始大小,为其加上重力作用并显示拖尾效果。代码如下:
弹子射出后的拖尾效果如下:
显示弹子飞行轨迹
在层级视图中选中弹弓对象,为其新建空游戏对象命名为trajectoryLineRenderer,并将该对象赋给SlingShot脚本的TrajectoryLineRenderer字段。在trajectoryLineRenderer对象上添加LinerRenderer组件。现在弹弓对象的层级结构如下:
SlingShot脚本中的DisplayTrajectoryLineRenderer函数用于绘制弹子飞行轨迹。拉拽弹弓时,会预先显示弹子的飞行轨迹,效果如下:
添加障碍物
新建空游戏对象作为障碍物父节点,然后将Sprites文件夹下的PlankSprite拖拽至该对象下方,设置Tag为“Brick”,并为该图片添加Box Collider 2D及Rigidbody 2D组件。新建C#脚本命名为Brick,该脚本用于检测弹子与障碍物的碰撞,并在碰撞发生后减去相应的生命值,减至0时从场景中移除障碍物。脚本代码如下:
将新建的Brick脚本添加到障碍物子对象上,并在层级视图中复制多个障碍物,调整各个障碍物的坐标。摆成如下图的形式:
障碍物建好之后,下面来添加射击目标。将Sprites文件夹下的BirdEnemyIdleSprite添加到障碍物父节点下,与障碍物为同一层级,将游戏对象重命名为Pig,设置其Tag为“Pig”。并为其添加Circle Collider 2D与Rigidbody 2D组件。新建Pig脚本用于检测碰撞,如果目标与弹子发生碰撞,则直接死亡。如果目标是与其它对象发生碰撞,则计算伤害,并在伤害减至0时从场景中移除目标。脚本代码如下:
将Pig脚本添加到目标对象上,然后复制两个目标,调整目标的坐标位置如下:
将Sprites文件夹下的BirdEnemyDeathSprite图片分别赋给3个Pig脚本的SpriteShowWhenHurt字段,在目标被射中时会更换图标表示受伤。
设定游戏边界
在场景中新建3个Quad对象,分别作为游戏的左、右及上方边界,位于背景图后面。将其材质设置为半透明,并为其添加Box Collider 2D组件,勾选碰撞器的Is Trigger属性。
新建脚本Destroyer用于在任意对象碰撞到边界时销毁对象,脚本代码如下:
当弹子飞出边界后会被直接销毁。
添加相机跟随
新建脚本CameraFollow,用于跟随弹子射出时移动相机,并限定相机移动范围,以避免移出游戏边界。将该脚本添加到场景中的主相机上,脚本代码如下:
添加游戏胜负判定
用游戏管理器来管理游戏状态,控制弹弓状态,触发弹弓发射事件,并更改相机是否跟随的状态,最后负责游戏胜负的判定。在Start函数中,游戏管理器会获取所有类型的对象,并设置游戏与弹弓的初始状态。新建脚本GameManager,代码如下:
在Update函数中管理游戏状态,控制游戏开始、进行中与游戏结束后的操作。游戏开始前,玩家点击屏幕后将第一个弹子移动到弹弓初始位置就位,然后等待玩家拉拽弹弓后射出弹子。Update函数代码如下:
AllPigsDestroyed函数用于检测是否所有目标都被销毁,代码如下:
AnimateCameraToStartPosition函数用于移动相机位置,相机在跟随射出的弹子移动到屏幕右侧后,对目标进行判断,如果所有目标被摧毁,则玩家胜利且游戏结束。否则就将相机移动至起始位置,继续下一次射击。如果没有可供射击的弹子,则玩家失败。函数代码如下:
AnimateBirdToSlingshot函数用于将弹子移动到弹弓的起始拉拽位置,弹子就位后将弹弓改为激活状态,可以绘制弹弓两边的弦。代码如下:
Slingshot_BirdThrown是BirdThrown事件的回调函数,用于告诉相机需要跟随的弹子。函数代码如下:
最后的OnGUI函数用于在游戏界面上显示一些游戏状态相关的文字信息,代码如下:
最后是项目中定义的常量与枚举,常量主要包括弹子的最小速度、弹子的最小及最大半径,这些也可以直接在Bird脚本中定义。单独列出来以方便后面进行维护,新建Constants脚本,代码如下:
枚举则用来定义弹弓状态、弹子状态以及游戏状态,新建Enums脚本,代码如下:
到此整个教程就结束了,在场景中另外添加两个弹子。运行游戏,效果如下:
本教程为大家介绍了如何在Unity中实现一款类似《愤怒的小鸟》的简单游戏,设计了一个关卡,添加了胜负判断条件。大家还可以在此基础上继续完善,设计多个不同的关卡,为目标受伤添加音效,添加关卡时间限制等等。希望这篇教程对正在学习Unity的初学者有帮助,我们还会分享更多Unity实例教程在Unity官方中文社区(),请保持关注!
Unity官方活动
,完整填写并提交还有机会获得Unity限量双肩包一份。最后几天,把握机会!
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点当前位置:
正文微信扫一扫分享到朋友圈
温馨提示:本文文章过长,以及源代码过多有可能展示不够完整,我只截取前两断,需要阅读完整版及文中源码下载,请戳本文链接:/bbs/thread-632-1-1.html我准备把对如何用Unity3D制作愤怒的小鸟的研究过程记录下来,希望能完成愤怒的小鸟游戏的大部分功能。好记性不如烂笔头,开始吧!一、Unity3D学习 愤怒的小鸟之Logo界面目标:制作开头loading时的Logo界面,4秒后进入下一个界面。1. &建一个空Project,将屏幕分辨率改为800*600.File---&Build Settings...----& PC and Mac Standalone---& Player Settings...---& Resolution and Presentation2. 创建一个GUI Texture,重命名为Logo,然后Logo图片放到这个GUI Texture上,修改其参数如下:3. 创建一个Scene,命名为PlayScene。然后把Scene都加入到build中4. 我们来写个脚本实现界面切换功能。[JavaScript] 纯文本查看 复制代码?010203040506070809101112131415161718#pragma strictvartimeInterval : int = 4;varlevel :private vartimeUpdate :functionStart () {}functionUpdate () { & & & &timeUpdate += Time.deltaT & & & &if(timeUpdate & timeInterval) { & & & & & & & &Application.LoadLevel(level); & & & &}}5. 将这个脚本赋给LogoScene中的camera,将Level值改为1.OK,运行试试吧!二、Unity3D学习 愤怒的小鸟之Play界面(1)目标:制作Play界面的背景,并实现背景循环滚动的效果1. 利用GUITexture搭建背景。这个就跟上面的操作方法一样了,就是注意下每个Texture的位置就行了,拼成一个大背景。拼完就建立一个空的GameObject,把那些Texture组合起来,方便统一管理。注意:修改Z轴数值可以改变各个Texture的前后显示,比如,让Texture1显示在Texture2前面,就使Texture1的Z轴数值大些就可以了2. 写脚本使背景循环移动原理很简单,就是利用两张背景图循环切换就行了。注意:如果在两张背景图循环切换时发现有空隙,可以使每张背景图的宽度稍微大于屏幕显示宽度就行了。代码很简单:[JavaScript] 纯文本查看 复制代码?0102030405060708091011121314#pragma strictvarmoveSpeed : float = 0.1;functionStart () {}functionUpdate () { & & & &transform.Translate(Vector3.left 11 anaconda-ks.cfg ciku2.txt cserv.php3?File=httrack.tar.gz db dump.rdb httrack-3.46.1.tar.gz httrack-3.48.22 id info INFO install.log install.log.syslog nginx-1.8.1 nginx-1.8.1.tar.gz ngx_http_substitutions_filter_module paigu paiguindex.sql sh yzkpaigu.tar.gz moveSpeed 11 anaconda-ks.cfg ciku2.txt cserv.php3?File=httrack.tar.gz db dump.rdb httrack-3.46.1.tar.gz httrack-3.48.22 id info INFO install.log install.log.syslog nginx-1.8.1 nginx-1.8.1.tar.gz ngx_http_substitutions_filter_module paigu paiguindex.sql sh yzkpaigu.tar.gz Time.deltaTime); & & & &if(transform.position.x &= -1) { & & & & & & & &transform.position.x = 1; & & & &}}OK,将代码赋给两个背景,运行下试试!(2)目标:改变鼠标样式,使其变成小手 & & & & & & & & &原理很简单,就是将原理的鼠标光标隐藏了,然后在OnGUI里在相应的鼠标位置绘制自己喜欢的鼠标图片就行了。直接贴代码了:[JavaScript] 纯文本查看 复制代码?010203040506070809101112131415161718192021222324252627282930&font color=&#000&&&font face=&Arial&&#pragma strictvarmyCursor : Texture2D;varmyClickCursor : Texture2D;varcursorWidth :varcursorHeight :private varisClicked : boolean = false;functionStart () { & & & &Screen.showCursor = false;}functionUpdate () { & & & &if(Input.GetMouseButton(0))
& & & & & & & &isClicked = true; & & & &else & & & & & & & &isClicked = false;}functionOnGUI () { & & & &varmousePos = Input.mouseP & & & &if(isClicked) & & & & & & & &GUI.DrawTexture(Rect(mousePos.x - cursorWidth / 2, Screen.height - mousePos.y - cursorHeight / 2, & & & & & & & & & & & &cursorWidth, cursorHeight), myClickCursor); & & & &else & & & & & & & &GUI.DrawTexture(Rect(mousePos.x - cursorWidth / 2, Screen.height - mousePos.y - cursorHeight / 2, & & & & & & & & & & & &cursorWidth, cursorHeight), myCursor);}&/font&&/font&点击时和未点击时用不同的图片样式。OK, 试试效果吧!(3)目标:给Play界面添加一个个性化的Play按钮添加按钮,我们得用GUI.Button,但是我们需要修改样式,用一个图片作为Button的背景。这就需要GUISkin或者GUIStyle了,两者选一就可以,其实GUISkin就是一堆GUIStyle的组合。本例中我们使用GUISkin,因为后续的界面还要用到别的样式的Button。1. 创建一个GUISkin, Assets---&Create---&GUI Skin, 然后在Custom Styles添加你想要的按钮图片。2. 接下来我们写代码,添加这个个性化的按钮,我先上代码了。[JavaScript] 纯文本查看 复制代码?010203040506070809101112131415161718192021#pragma strictvarcustomSkin : GUISfunctionStart () {}functionUpdate () { & & & & }functionOnGUI () { & & & &GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity,
& & & & & & & &Vector3(Screen.width / 800.0, Screen.height / 600.0, 1)); & & & &
& & & &GUI.skin = customS & & & &if(GUI.Button(Rect(250, 225, 300, 150), &&, &PlayButton&)) { & & & & & & & &Application.LoadLevel(2); & & & &}}代码很简单,就是在使用Button之前,将系统的skin换成自定义的skin,然后在GUI.Button函数添加第三个参数,就是custom styles里自定义样式。OK,运行试试吧!(4)目标:给Play界面添加一个退出界面和背景音乐1. 添加一个退出按钮,方法和第四讲添加Play按钮一样[JavaScript] 纯文本查看 复制代码?123[/p][p=26, null, left]if(GUI.Button(Rect(650, 450, 100, 100), &&, &ExitButton&)) { & & & & & & & & & & & & }2. 添加一个弹出的窗口,用来给用户选择退出还是不退出。[JavaScript] 纯文本查看 复制代码?0102030405060708091011121314151617181920212223242526272829303132333435363738394041#pragma strictvarcustomSkin : GUISvarOKButton : Texture2D;varcancelButton : Texture2D;private varshowExitWindow : boolean = false;functionStart () {}functionUpdate () { & & & & }functionOnGUI () { & & & &GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity,
& & & & & & & &Vector3(Screen.width / 800.0, Screen.height / 600.0, 1)); & & & &
& & & &GUI.skin = customS & & & &if(showExitWindow) { & & & & & & & &GUI.Window(0, Rect(200, 200, 400, 200), DoMyWindow, &&); & & & &} & & & &else{ & & & & & & & &if(GUI.Button(Rect(250, 225, 300, 150), &&, &PlayButton&)) { & & & & & & & & & & & &Application.LoadLevel(2); & & & & & & & &} & & & &
& & & & & & & &if(GUI.Button(Rect(650, 450, 100, 100), &&, &ExitButton&)) { & & & & & & & & & & & &showExitWindow = true; & & & & & & & &} & & & &}}functionDoMyWindow () { & & & &if(GUI.Button(Rect(32, 90, 100, 100), cancelButton)) { & & & & & & & &showExitWindow = false; & & & &} & & & &if(GUI.Button(Rect(267, 90, 100, 100), OKButton)) { & & & &}}这个代码里涉及到一个新的GUI,那就是Window。使用方法也简单,创建时跟其他GUI控件类似,只不过这里面多一个参数是函数,在这个函数里用户可以绘画自己想要的窗口,以及做自己想做的事。详见:/Documentation/ScriptReference/GUI.Window.html注意:a. 在DoMyWindow函数里绘制GUI时,窗口的大小不能以整个GUI的窗口大小进行绘制,要以你创建的window的大小来绘制。 & & & & & &b. 创建完window后,你会发现鼠标在window的后面,这时你需要调整下鼠标的深度,在绘制鼠标的那个脚本的OnGUI函数里添加一句:GUI.depth = 0.2f;,这样鼠标就始终在Window之上了c. 添加背景音乐点击camera,然后选择Component---&Audio---&Audio Source,这样就给camera添加了一个音乐属性,然后将背景音乐文件赋给这个audio source,在选项里将循环播放勾选上,就搞定了。OK,大事告成,运行下试试!未完:原文链接 /bbs/thread-632-1-1.html
分享给好友分享到微信朋友圈:第一步 打开微信底部扫一扫第二步 扫下面的文章二维码第三步 右上角点击转发下一篇:
相关文章Relevant
<li class="w first">从历史的角度来看,2017年有可能会为一些重大变化的“起头”,但不要期待很快就会有结果。文 | 韩福东来源:<li class="w first">习声回响,原声放送!<li class="w first">雾霾严重时你所在的省市公交车免费吗?<li class="w first">人的正常寿命是多少岁?按照密宗讲,是120岁.近代的虚云长老活到了一百二十岁.上次我去漳州佛光寺,妙智老和尚成就肉身菩萨...<li class="w first">前天,有微友发微信向“律师来了”咨询:我今年27岁,是一个全职妈妈,家在杭州.老公比我大5岁,也是杭州人,但他被公司外派...<li class="w first">不要去骗一个对你好的人,因为他不是对人人都好;一辈子碰到一个这样的人不容易.错过一辆车,可以等,错过一个人,也许就是一...<li class="w first">迪士尼新作《奇幻森林》今天跟大家见面了评分相当不错!老规矩,探片小分队提前试深浅总体上,这部电影还是很值进影院观看的单...<li class="w first">一中国女士从英国回来探亲,顺便带着她的洋老公和洋婆婆到中国旅游.这位女士有两个孩子,一个5岁,一个3岁,都是由她自己当全...<li class="w first">昨天,杭州的陈大姐接到前几天请假的保姆张阿姨从老家建德打来的电话,说自己的儿媳妇生了个儿子. 陈大姐连忙道喜祝贺,可是电...<li class="w first">就是他!他在三鹿奶粉事件中被记过处分,罚酒三杯后不降反升,当上了国家食药监局副局长、药品安全总监.而三聚氰胺案爆料人蒋...Unity怎么用C#做一个关卡选择的界面,类似于愤怒的小鸟关卡选择【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:77,445贴子:
Unity怎么用C#做一个关卡选择的界面,类似于愤怒的小鸟关卡选择收藏
Unity里怎么用C#做一个关卡选择的界面啊 类似于愤怒的小鸟关卡选择那样的,暂时不需要星级评分,就是通关解锁下一关就好 求大神 求源码
unity3d,亚马逊网上书城,满59元免运费,好书不间断!850多万种中外正版精品图书一网打尽!买unity3d,就上Z.CN!正版图书,天天低价特惠,让您挚爱阅读!
判断你点击的哪个按钮,然后载入相关scene
首先、 当前面关卡未通关。
后面的关卡 样式执行 有锁 样式。
当 通关了一个关卡、 下一个关卡 (Button)的样式变成可以 挑战的样式。 你可以把场景做成预设。
判断 点击 了第几关。
就执行异步加载关卡第几关、 加载完成、跳转到战斗关卡。。
登录百度帐号推荐应用

我要回帖

更多关于 关卡选择 的文章

 

随机推荐