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

时间:2023-02-07 17:00:45

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

我们先让背景循环播放起来。在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;
}

}
}

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