使用Unity3D 5.3.4 模仿2D游戏 FlappyBird(二)

来源:互联网 发布:巨鹿之战 知乎 编辑:程序博客网 时间:2024/05/18 03:30

继续上一篇博客,这篇我们继续完成剩下的内容。

我们先让背景循环播放起来。在Scripts文件夹下新建一个c#脚本,名字取做BackgroundTransform。给Prefabs文件夹下的bg添加此脚本。编辑脚本:

using UnityEngine;using System.Collections;public class BackgroundTrandform : MonoBehaviour {    public float moveSpeed = 3f;   //定义背景移动的速度    private Transform bgTrans;  //获取背景的Transform组件    Vector3 bgPos;    //获取当前背景图片的位置    // Use this for initialization    void Start () {        bgTrans = GetComponent<Transform>();    }    // Update is called once per frame    void Update () {        //每一帧都让背景向左移动        bgTrans.Translate(Vector3.left * moveSpeed * Time.deltaTime);        //获取当前帧的背景图片的位置        bgPos = bgTrans.position;        //当第一张图片移动到相机外时,把他的位置拼接到最后。这样就可以实现背景的循环播放        //数据是通过在scene面板拖动得到的        if (bgPos.x < -4.81)        {            bgTrans.position = new Vector3(9.62f, 0, 0);        }    }}

在Scripts文件夹下新建脚本CreatePipe,给Prefabs下的pipe添加此脚本。编辑脚本:

using UnityEngine;using System.Collections;public class CreatePipe : MonoBehaviour {    public GameObject pipe;   //用来获取障碍    public float createTime = 1;  //用来记录创建障碍的间隔    // Use this for initialization    void Start () {        //过0秒后调用createPipe()  然后每隔createTime秒调用一次        InvokeRepeating("createPipe", 0, createTime);    }    // Update is called once per frame    void Update () {    }    void createPipe()    {        //因为障碍物的位置改变只有上下,所以随机获取他的y值        float y = Random.Range(-1.74f, 2.72f);        //创建一个pipe,位置是上下随机的,其他不变,没有旋转        Instantiate(pipe, new Vector3(transform.position.x, y, 0), Quaternion.identity);    }}

同样的,pipe也需要移动,Scripts文件夹下新建PipeTransform脚本,给Prefabs文件夹下的pipe添加。编辑:

using UnityEngine;using System.Collections;public class PipeTransform : MonoBehaviour {    public float moveSpeed = 3f;   //定义移动速度和背景一样,否则不协调    private Transform pipeTrans;  //获取Transform组件    Vector3 pipePos;    //获取当前的位置    // Use this for initialization    void Start () {        pipeTrans = GetComponent<Transform>();    }    // Update is called once per frame    void Update () {        //每一帧都向左移动        pipeTrans.Translate(Vector3.left * moveSpeed * Time.deltaTime);        //获取当前帧的图片的位置        pipePos = pipeTrans.position;        //当图片移动到相机外时,把他销毁        if (pipePos.x < -3.27f)        {            Destroy(gameObject);        }    }}

这样就实现了背景循环播放,障碍随机产生并销毁。可以运行来查看效果。
给bird添加一个Rigidbody2D,然后再Scripts文件夹下新建一个Bird脚本,给bird添加此脚本,编辑:

using UnityEngine;using System.Collections;public class Bird : MonoBehaviour {    private Rigidbody2D birdRig;    //获取Rigidbody2D组件    public float upSpeed = 5;   //定义点击时给小鸟的向上的力的大小    // Use this for initialization    void Start () {        birdRig = GetComponent<Rigidbody2D>();    }    // Update is called once per frame    void Update () {        //当按下空格键时        if (Input.GetKeyDown(KeyCode.Space))        {            //给小鸟添加一个向上的速度            birdRig.velocity = Vector2.up * upSpeed;        }    }}

现在运行已经基本上可以玩了,就差一些碰撞和结束的判断了,剩下的在下一篇博客中继续讲解。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

0 0
原创粉丝点击