Unity3d实现Flappy Bird游戏

本文实例为大家分享了Unity3d实现Flappy Bird的具体代码,供大家参考,具体内容如下

一、小鸟

在游戏中,小鸟并不做水平位移,而是通过障碍物的移动让小鸟有水平运动的感觉,小鸟只需要对鼠标的点击调整竖直加速度就可以了,同时加上水平旋转模仿原版的FlappyBird的运动。同时,还要对竖直位置进行判断,否则游戏不能正常结束。

这里贴上小鸟上附加的脚本代码

Player.cs

using UnityEngine;

using System.Collections;

public class Player : MonoBehaviour {

private Rigidbody body;

public Vector3 jumpForce = new Vector3(0, 300, 0);

private bool state = true; //确保只执行一次

private int bestScore = 0;

// Use this for initialization

void Start () {

body = transform.GetComponent<Rigidbody>();

}

void OnCollisionEnter(Collision collisionInfo)

{

if (state)

{

//碰撞游戏结束

state = false;

Score.instance.state = false;

AudioManager.instance.PlayHit();

AudioManager.instance.PlayDie();

Invoke("EndGame", 0.4f);

}

}

// Update is called once per frame

void Update ()

{

//下限

if (transform.position.y < -20)

{

if (state)

{

state = false;

Score.instance.state = false;

AudioManager.instance.PlayDie();

Invoke("EndGame", 0.4f);

}

}

//上限

if (transform.position.y > 20)

{

if (state)

{

state = false;

Score.instance.state = false;

AudioManager.instance.PlayDie();

Invoke("EndGame", 0.4f);

}

}

//判断鼠标左键点击或者空格

if (Input.GetKeyDown(KeyCode.Space)||Input.GetMouseButtonDown(0))

{

AudioManager.instance.PlayFly();

body.velocity = Vector3.zero;

//加速度

body.AddForce(jumpForce);

//控制旋转量

this.transform.rotation = Quaternion.Euler(45, 270, 0);

}

else

{

//旋转

if (transform.rotation.eulerAngles.x >= 280||transform.rotation.eulerAngles.x<=50)

{

transform.Rotate(-150 * Time.deltaTime, 0, 0);

}

}

}

public void EndGame()

{

//保存最佳成绩

PlayerPrefs.SetInt("PlayerScore", Score.instance.score);

bestScore = PlayerPrefs.GetInt("PlayerBestScore");

if (Score.instance.score > bestScore)

bestScore = Score.instance.score;

PlayerPrefs.SetInt("PlayerBestScore", bestScore);

//跳转到结束场景

Application.LoadLevel("End");

}

}

二、障碍物

障碍物只要定时产生,随机设定偏移量,然后添加向左运动的速度就行了,同时要设定自动销毁的时间,回收障碍物,否则内存占用会越来越大。

这里用了三个脚本,分别是上下障碍物和障碍物生成脚本。附加到一个空物体上就行了。

GenerateObstacle.cs

using UnityEngine;

using System.Collections;

public class GenrateObstacle : MonoBehaviour {

public GameObject obstacle;

public GameObject obstacle1;

public float startTime = 1f;

public float gapTime=1.5f;

public float gapDistance = 13;

private Vector3 gapVector;

private Vector3 midVector;

// Use this for initialization

void Start () {

InvokeRepeating("InitiateObstacle", startTime, gapTime);

gapVector = new Vector3(0, gapDistance / 2, 0);

}

void InitiateObstacle()

{

midVector = new Vector3(8,Random.Range(-3.2f, 3.2f),0);

Instantiate(obstacle, midVector+gapVector,new Quaternion(0,0,180,0));

Instantiate(obstacle1, midVector-gapVector, Quaternion.identity);

}

}

Obstacle.cs

using UnityEngine;

using System.Collections;

public class Obstacle : MonoBehaviour {

public float speed = -8f;

private Rigidbody body;

private Transform player;

private bool isPassed = false;

// Use this for initialization

void Start () {

Destroy(this.gameObject, 4);

body = this.GetComponent<Rigidbody>();

body.velocity = new Vector3(speed, 0, 0);

player = GameObject.FindGameObjectWithTag("Bird").transform;

}

// Update is called once per frame

void Update () {

if (player.transform.position.x > transform.position.x && isPassed == false)

{

isPassed = true;

Score.instance.GetScore();

}

}

}

Obstacle1.cs

using UnityEngine;

using System.Collections;

public class Obstacle1 : MonoBehaviour {

public float speed = -8f;

private Rigidbody body;

private Transform player;

private bool isPassed = false;

// Use this for initialization

void Start()

{

Destroy(this.gameObject, 4);

body = this.GetComponent<Rigidbody>();

body.velocity = new Vector3(speed, 0, 0);

player = GameObject.FindGameObjectWithTag("Bird").transform;

}

}

此外还有分数显示,最佳分数显示,音效等等,都是细节。

以上是 Unity3d实现Flappy Bird游戏 的全部内容, 来源链接: utcz.com/z/324006.html

回到顶部