亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Unity實現Flappy Bird游戲開發(fā)實戰(zhàn)

 更新時間:2020年04月16日 12:29:45   作者:amy260231120  
這篇文章主要為大家詳細介紹了Unity實現Flappy Bird游戲開發(fā)實戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Unity實現Flappy Bird游戲的具體代碼,供大家參考,具體內容如下

參考:騰訊課程(零基礎制作像素鳥)
環(huán)境:Unity2017.2.0f3

主界面(Main)的制作

沒有什么技巧性

注意點:

1.寫好Button的點擊效果,并在UI上添加效果
2.切換界面的實現不需要通過load,直接設置SetActive()true or false 來的更快更效率

// 比如:當點擊打開解釋說明的按鈕時候
 public void clickOpenExplainScene() {
 if (!explainScene.activeSelf) {
  explainScene.SetActive (true);
 } 
 if (startScene.activeSelf) {
  startScene.SetActive (false);
 } 
 }

2.因為不管是哪個場景,背景音樂都只有一個。所以背景音樂通過單例模式實現

// 實現背景音樂播放的單例類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BGSingleton : MonoBehaviour {

 private static BGSingleton instance = null;
 public AudioSource audioSource = null;

 public static BGSingleton getSingleton() {
 if (instance == null) {
  instance = new BGSingleton ();
 }
 return instance;
 }
 void Awake () {
 if (instance != null && instance != this) {
  Destroy (this.gameObject);
 } else {
  instance = this;
  Debug.Log ("create");
 }
 DontDestroyOnLoad (this.gameObject);
 }

//通過主界面上的開關button控制是否靜音
 public void IsPlay(bool isPlay) {
 if (isPlay == true) {
  audioSource.mute = false;
  Debug.Log ("play background music");
 } else {
  audioSource.mute = true;
 }
 }
}

游戲主場景

1 場景的來回切換

通過2個場景,來回播放實現
前一個場景完全移除屏幕后,立刻重新設置坐標,并且讓柱子的位置隨機出現

// mapMove.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mapMove : MonoBehaviour {

 public float speed = 300f;
 public RectTransform tube1;
 public RectTransform tube2;

 private RectTransform transform;
 // Use this for initialization
 void Awake () {
 transform = GetComponent<RectTransform>(); 
 }

 // Update is called once per frame
 void Update () {

 // Translate:Moves the transform in the direction and distance of translation.

 // If you add or subtract to a value every frame chances are you should multiply with Time.deltaTime.
 // When you multiply with Time.deltaTime you essentially express: 
 // I want to move this object 10 meters per second instead of 10 meters per frame.
 transform.Translate (Vector3.left * Time.deltaTime * speed);

 // 如果前一個地圖移到-764以外的地方,重放到764
 if (transform.anchoredPosition.x <= -764) {

  transform.anchoredPosition = new Vector2 (764, 0);
  // 設置水管的位置為隨機出現,x不變,y隨機出現
  tube1.anchoredPosition = new Vector2 (tube1.anchoredPosition.x, Random.Range (-110, 200));
  tube2.anchoredPosition = new Vector2 (tube2.anchoredPosition.x, Random.Range (-110, 200));
 }
 }
}

2 主要是鳥和柱子接觸后產生的碰撞檢測,首先需要設置鳥和柱子都為is Trigger觸發(fā)器,因為這里不需要物理的碰撞效果

提前給所有柱子和上下面設置好tag,通過tag檢測碰撞,停止移動地圖并銷毀鳥

// 碰撞檢測
 void OnTriggerEnter2D (Collider2D other)
 {
 // 如果鳥碰到柱子
 if (other.gameObject.CompareTag("tube")) {

  if (!gameOver.activeSelf) {
  gameOver.SetActive (true);
  audioManager.singer.setAudio (audioClipType.hit);
  }

  // 通過地圖的名字獲取到地圖移動腳本
  mapMove map1 = GameObject.Find ("map1").GetComponent<mapMove> ();
  map1.enabled = false;

  mapMove map2 = GameObject.Find ("map2").GetComponent<mapMove> ();
  map2.enabled = false;

  Rigidbody2D playerRigidBody2D = GameObject.Find ("player").GetComponent<Rigidbody2D> ();
  Destroy (playerRigidBody2D);

 }
 }

3 音效設置和鳥的朝向問題

因為鳥震動翅膀的聲音需要和其他音效不是一個線程,所以只能單獨領出來寫

// playerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController : MonoBehaviour {

 private Rigidbody2D player;

 public AudioSource playerAudio;
 public float speed;
 // Use this for initialization
 void Start () {
 player = GetComponent<Rigidbody2D>();
 // 重置分數
 gameSingleton.getSingleton ().score = 0;
 }

 // Update is called once per frame
 void Update () {
 // 如果鳥被銷毀游戲結束了,直接返回
 if (player == null) { return; }

 // 當點擊鼠標,給鳥一個向上的速度
 if (Input.GetMouseButtonDown (0)) {
  player.velocity = new Vector2(0, speed);
//  audioManager.singer.setAudio (audioClipType.wing);
  // 因為翅膀的聲音和過柱子的聲音,不能是同個線程的
  if (!gameSingleton.getSingleton ().isMute) {
  playerAudio.Play();
  }

 }

 // 通過判斷鳥的速度正負設計鳥的頭的轉向,
 if (player.velocity.y > 0) {
  transform.eulerAngles = new Vector3 (0, 0, 45);
 } else {
  transform.eulerAngles = new Vector3 (0, 0, -45);
 }
 }

}

4 分數的計算

這里需要再次用到觸碰檢測,給柱子之間空隙加個透明的檢測器,每次一過柱子就加一分

用單例類存儲分數等數據:

// gameSingleton.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class gameSingleton {

 // 使用單例模式記錄分數
 // 顯然單例模式的要點有三個;一是某個類只能有一個實例;
 // 二是它必須自行創(chuàng)建這個實例;三是它必須自行向整個系統提供這個實例。
 // 從具體實現角度來說,就是以下三點:一是單例模式的類只提供私有的構造函數,
 // 二是類定義中含有一個該類的靜態(tài)私有對象,三是該類提供了一個靜態(tài)的公有的函數用于創(chuàng)建或獲取它本身的靜態(tài)私有對象。

 public float score;
 public float bestScore;
 public bool isMute; // 用來控制音效
// public bool isFirstToPlay;

 // 含有一個靜態(tài)私有對象,這也是唯一一個對象
 private static gameSingleton singer;

 // 私有的構造函數
 private gameSingleton () {
 score = 0;
 bestScore = 0;
 isMute = false;
// isFirstToPlay = true;
 }

 // 提供一個靜態(tài)的公有函數 用于創(chuàng)建或獲取本身的靜態(tài)私有對象
 public static gameSingleton getSingleton() {
 if (singer == null) {
  singer = new gameSingleton ();
 }
 return singer;
 }

 public void setBestScore() {
 if (score > bestScore) {
  bestScore = score;
 }
 }

}

5 最后的gameover界面的動畫效果,可以通過Unity的Animation窗口制作

導入到iOS設備上

File- BuildSetting - 加入所有場景,- iOS - build
會產生xcode的項目文件

在xcode中打開,在General里設置下證書(網上教程很多,不需要99刀也能真機測試)

主要遇到的問題

  • 為了設置分辨率需要調出Game窗口
  • 類中的變量,需要提前初始化好,不然就為空報錯。要么從UI上吧對應的組件拖下來,要么寫一句getComponent
  • BGM需要拖出來自立個類寫,因為他不隨場景變化而消失或者重復創(chuàng)建
  • 真機測試的時候,Bundle ldentifier不能亂寫,假如出現security問題,需要在手機-通用-描述文件與設備管理中,點擊信任你的蘋果賬號。

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

相關文章

  • C#多線程系列之線程等待

    C#多線程系列之線程等待

    本文詳細講解了C#多線程中的線程等待,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#使用Process類調用外部exe程序

    C#使用Process類調用外部exe程序

    本文通過兩個示例講解了一下Process類調用外部應用程序的基本用法,并簡單講解了StartInfo屬性,有需要的朋友可以參考一下。
    2016-03-03
  • C# MeasureString測量字符串函數的使用方法

    C# MeasureString測量字符串函數的使用方法

    這篇文章主要介紹了C# MeasureString測量字符串函數的使用方法,需要的朋友可以參考下
    2014-10-10
  • 在WPF中使用多線程更新UI

    在WPF中使用多線程更新UI

    這篇文章介紹了在WPF中使用多線程更新UI的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現簡單過濾非法字符實例

    C#實現簡單過濾非法字符實例

    這篇文章主要介紹了C#實現簡單過濾非法字符的方法,涉及C#針對字符串遍歷與判斷的相關技巧,非常簡單實用,需要的朋友可以參考下
    2015-11-11
  • C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • C#事件中的兩個參數詳解(object sender,EventArgs e)

    C#事件中的兩個參數詳解(object sender,EventArgs e)

    這篇文章主要介紹了C#事件中的兩個參數詳解(object sender,EventArgs e),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • c# 從IE瀏覽器獲取當前頁面的內容

    c# 從IE瀏覽器獲取當前頁面的內容

    從IE瀏覽器獲取當前頁面內容可能有多種方式,今天我所介紹的是其中一種方法。基本原理:當鼠標點擊當前IE頁面時,獲取鼠標的坐標位置,根據鼠標位置獲取當前頁面的句柄,然后根據句柄,調用win32的東西進而獲取頁面內容。感興趣的朋友可以參考下本文
    2021-06-06
  • C#畫筆Pen繪制光滑模式曲線的方法

    C#畫筆Pen繪制光滑模式曲線的方法

    這篇文章主要介紹了C#畫筆Pen繪制光滑模式曲線的方法,涉及C#圖形繪制畫筆Pen相關屬性的設置技巧,需要的朋友可以參考下
    2015-06-06
  • C#?winform實現中英文切換功能的四種方式

    C#?winform實現中英文切換功能的四種方式

    這篇文章主要介紹了在C#?winform應用程序中實現中英文切換功能的四種方式,資源文件(Resources),本地化(Localization),動態(tài)設置控件字體和切換語言環(huán)境這四種方式,下面將詳細介紹每種方式及其具體實現,并討論它們的優(yōu)缺點,需要的朋友可以參考下
    2024-04-04

最新評論