欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity3d實現(xiàn)Flappy Bird游戲

 更新時間:2018年12月24日 11:33:15   作者:qq402335257  
這篇文章主要為大家詳細介紹了Unity3d實現(xiàn)Flappy Bird游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Unity3d實現(xiàn)Flappy Bird的具體代碼,供大家參考,具體內(nèi)容如下

一、小鳥

在游戲中,小鳥并不做水平位移,而是通過障礙物的移動讓小鳥有水平運動的感覺,小鳥只需要對鼠標的點擊調(diào)整豎直加速度就可以了,同時加上水平旋轉模仿原版的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; //確保只執(zhí)行一次
 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");
 }
 
}

二、障礙物

障礙物只要定時產(chǎn)生,隨機設定偏移量,然后添加向左運動的速度就行了,同時要設定自動銷毀的時間,回收障礙物,否則內(nèi)存占用會越來越大。

這里用了三個腳本,分別是上下障礙物和障礙物生成腳本。附加到一個空物體上就行了。

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;
 }
 
 
}

此外還有分數(shù)顯示,最佳分數(shù)顯示,音效等等,都是細節(jié)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#中is與As運算符號的使用詳解

    C#中is與As運算符號的使用詳解

    本篇文章是對C#中is與As運算符號的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C# Hashtable/Dictionary寫入和讀取對比詳解

    C# Hashtable/Dictionary寫入和讀取對比詳解

    本文中將從基礎角度講解HashTable、Dictionary的構造和通過程序進行插入讀取對比
    2013-11-11
  • c# 用ffmpeg從視頻中截圖

    c# 用ffmpeg從視頻中截圖

    這篇文章主要介紹了c# 用ffmpeg從視頻中截圖的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#入門學習之集合、比較和轉換

    C#入門學習之集合、比較和轉換

    本文詳細講解了C#中的集合、比較和轉換,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#自定義簡化cookie類實例

    C#自定義簡化cookie類實例

    這篇文章主要介紹了C#自定義簡化cookie類,實例分析了C#操作cookie的添加、獲取及刪除等操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C#多線程之任務的用法詳解

    C#多線程之任務的用法詳解

    本文詳細講解了C#多線程之任務的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#文件非占用讀取與幫助類FileHelper

    C#文件非占用讀取與幫助類FileHelper

    這篇文章介紹了C#文件非占用讀取與幫助類FileHelper,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#編程獲取各種電腦硬件信息的方法示例

    C#編程獲取各種電腦硬件信息的方法示例

    這篇文章主要介紹了C#編程獲取各種電腦硬件信息的方法,結合實例形式分析了C#獲取電腦CPU、主板、硬盤、BIOS編號等信息的相關操作技巧與注意事項,需要的朋友可以參考下
    2017-08-08
  • C#實現(xiàn)批量更改文件名稱大小寫或擴展名

    C#實現(xiàn)批量更改文件名稱大小寫或擴展名

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)批量更改文件名稱大小寫或擴展名的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#實現(xiàn)Access通用訪問類OleDbHelper完整實例

    C#實現(xiàn)Access通用訪問類OleDbHelper完整實例

    這篇文章主要介紹了C#實現(xiàn)Access通用訪問類OleDbHelper,結合完整實例形式分析了C#針對access數(shù)據(jù)庫的連接、查詢、遍歷、分頁顯示等相關操作技巧,需要的朋友可以參考下
    2017-02-02

最新評論