FlappyBird开发总结(五)——背景延伸
2015-03-06 16:08
211 查看
在写脚本之前,我先上个图把背景中的物体结构表达清楚一下
我觉得图片应该表达清楚了,要提示一点,这个GameObject物体的位置要自己把握好,不然游戏效果有点差。
好了,这次要写的脚本是放在这个GameObject物体下的,记住GameObject是空物体,然后给他一个碰撞器勾选IsTriger成为触发器(不知道说法对不对。。。),然后我们把背景1的预制物体的改动apply一下,让该背景1这个物体的改动应用到背景2,背景3,背景4上。
MoveTarget.cs
using UnityEngine; using System.Collections; public class MoveTarget : MonoBehaviour { public Transform currentBackGround; public Pipe pipe1;//Pipe.cs脚本的引用,下面再提 public Pipe pipe2; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter(Collider gameObject) { if (gameObject.tag == "Player") { Transform firstBackGround = GameManager.gameInstance.firstBackGround; currentBackGround.position = new Vector3(firstBackGround.position.x + 10, currentBackGround.position.y, currentBackGround.position.z); GameManager.gameInstance.firstBackGround = currentBackGround; pipe1.RundomPosition(); pipe2.RundomPosition(); } } }
好了,这样就能在小鸟接触到背景1的GameObject物体后让背景1移动到背景4后面,然后当接触到背景2的GameObject物体后让背景2又移动到移动后的背景1的后面,如此循环,代码很清楚,不多做解释。
然而这里多了调用了一个方法
pipe2.RundomPosition();
这是干什么的呢?
首先我们想象,一开始的4个背景的上下管道的位置是固定一样的吧,游戏当然不能这样,我们得让上下管道的位置在游戏进行时改变才能增加游戏的那个什么趣味性吧?(请允许我用这个词。。。想不到词了)
首先,我们得吧PipeUp和PipeDown放到共同的一个空物体下,也就是说成为该空物体的子物体,这个空物体就是上图中的Pipe1和Pipe2了,so,现在我们该解决问题了,给Pipe1和Pipe2(所有背景都要这样操作哦,也就是上面红色物体的apply一下),当然你最好都看一下确定一下是不是都一样。现在呢,我们写一个脚本Pipe.cs,注意是给到每个上下管道上的父物体!
using UnityEngine; using System.Collections; public class Pipe : MonoBehaviour { private float minPositionY = -0.025f;//此处的最小值和下面的最大值自己去算啦 ,不解释 private float maxPositionY = 0.219f; public GameObject scores;//NGUI做的UI,暂时用不到,计分用 public void RundomPosition() { float positionY = Random.Range(minPositionY, maxPositionY);//随机数 this.transform.localPosition = new Vector3(this.transform.localPosition.x, positionY, this.transform.localPosition.z); //注意因为Pipe1和Pipe2是背景的子物体,所以这里是用localPosition! //下面的可以先不了解,作用是每当小鸟飞过管道了,就加上一分,audio.Play()就是播放加分的音源了 void OnTriggerExit(Collider gameObject) { if(gameObject.tag=="Player") { audio.Play(); GameManager.gameInstance.currentScores++; // Debug.Log(GameManager.gameInstance.currentScores); scores.GetComponent<UILabel>().text = GameManager.gameInstance.currentScores + ""; } } }
写完这两个脚本后,背景的无限延伸就实现了。
相关文章推荐
- cocos2dx3.3开发FlappyBird总结一:背景介绍
- cocos2dx3.3开发FlappyBird总结十:背景层设计
- FlappyBird开发总结(一)—— 开发前所必备
- FlappyBird开发总结(三)——小鸟脚本,让小鸟煽动翅膀
- cocos2dx3.3开发FlappyBird总结十四:常量定义
- 背景与小鸟--FlappyBird游戏开发教程之二
- 安卓开发 自定义Dialog的问题总结之---Title背景为黑问题、edittext无法弹出软键盘
- ireport+struts2集成开发总结一: 解决HTML图片背景不能显示的问题
- cocos2dx3.3开发FlappyBird总结十二:状态层设计
- cocos2dx3.3开发FlappyBird总结十一:控制层功能设计
- FlappyBird开发总结(七)—— GameOver计分板
- cocos2dx3.3开发FlappyBird总结四:资源管理类
- cocos2dx3.3开发FlappyBird总结三:项目剖析
- cocos2dx3.3开发FlappyBird总结十三:数字特效类
- cocos2dx3.3开发FlappyBird总结八:载入场景LoadingScene
- FlappyBird开发总结(二)——场景
- cocos2dxFlappyBird开发总结二:开发环境介绍
- cocos2dx3.3开发FlappyBird总结六:设计共享小鸟类(主角)
- cocos2dx3.3开发FlappyBird总结十六:游戏层实现
- cocos2dx3.3开发FlappyBird总结十五:记录玩家得分