網頁

2019年7月14日 星期日

Unity 程式設計教學 - 按鈕綁定事件 Button Script 的應用

問題:設計1個按鈕,當使用者按此按鈕,可以結束程式。

如何再增加一個 Button(按鈕)?
選1個已做好的 Button(如 Button_stop),按右鍵,選 Duplicate,複製出另 1 個 Button 。或者直接按 Ctrl+D,直接複製。
將複製出來的 Button 更名為 Button_Quit。
Text 的內容改為 「結束程式」。
在 Scene 視窗移動此按鈕的位置,以本例來說,是向右移動。
在 Scene視窗移動,還是要看成品是要在那一種設備上觀看,這時可以在 Game視窗去調整 寬高比。請看筆者另一篇文章,Unity - Play (播放)工具列和 Game 視窗的使用說明 。
手機直放。
手機橫放。
---------------------------------------------------------------------
如果使用新增 Button的方式:
選 Canvas ,按右鍵,選 「UI / Button」。
新 Button 的大小和位置都要重新調整會很麻煩。
---------------------------------------------------------------------
新增 Script(腳本)
Assets / Script,按右鍵,選 「Create/C# Script」。
選「 NewBehaviourScript」此Script ,按右鍵 ,選  Rename, 改名為 QuitGameScript (也可改名爲  QuitGameHandler )。
對「QuitGameScript」連按二下,叫出 Visual Studio 。
程式如下:

using System.Collections.Generic;
using UnityEngine;

public class QuitGameScript : MonoBehaviour {

    public void Click()
    {
        Application.Quit();
          }
}
在Visual Studio,按「附加至 Unity」鈕,偵錯程式有無寫錯。
如 果有錯,按「停止偵錯」鈕,如打錯字,將 ppublic 改成 public。
按「附加至 Unity」鈕,程式已無錯誤。
切回到 Unity。將 QuitGameScript 拖曳到 Button_Quit 物件,把 Script(腳本) 綁定到 Button 物件。
另一種綁 Script 的方式:
選「 Button_Quit」,按「Add Component」鈕,輸入 quit 搜尋,選 Quit Game Script 。
結論:用拖曳的方式比較快。

在  Button (Script),按 「+」鈕。
按 None(Object) 右邊的小圓點,按 Scene,輸入 button 搜尋 ,選 Button_Quit。
按 No Function,選 QuitGameScript 中的 Click() 此事件程序。
 結果如下:

另一種按鈕綁定事件的方式
程式修改如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class QuitGameScript : MonoBehaviour {

    void Start () {
        Button btn = this.GetComponent(Button)();
        btn.onClick.AddListener (OnClick);
    }
    private void OnClick(){
        Application.Quit();
    }
}
因為 Google Blogger 編輯器 會把 <Button> 自動加上 </Button> ,造成錯亂,所以請將
Button btn = this.GetComponent(Button)();
改正為 :
 Button btn = this.GetComponent<Button>();

切回到 Unity,將 QuitGameScript 拖曳到 Button_Quit 物件,把 Script(腳本) 直接綁定到 Button_Quit 物件。
在 Unity 執行,按此 按鈕,程式仍沒結束,所以要上傳到手機上測試。不過可以在 Script 加上 Debug.Log("quit");

 private void OnClick()
    {
        Debug.Log("quit");
        Application.Quit();
    }
按 Play 鍵執行,當你按了 「結束程式」此按鈕.
在 Game 視窗的狀態列會出現 quit ,表示正常。
作業:
如何設計1 個按鈕,當使用者按下去,直接用手機打電話?
hint : 使用   Application.OpenURL("tel://0422223307");
參考資料:
Unity UGUI 按钮绑定事件的 4 种方式,https://www.cnblogs.com/isayes/p/6370168.html

如何更改Unity Button (按鈕)的圖片?
將檔案總管中的圖片(如 tchcvs_logo.jpg)拖曳到 Unity ,Project /Assests 內。
將圖片的 Texture Type 從 Default 更改為 Sprite(2D and UI)。
將圖片(如 tchcvs_logo.jpg)拖曳到Button 的 Image(Script) / Source Image 內。
結果按鈕的圖片已變更。
UI/Image,插入一張圖片,也是相同的做法。

參考作品 
https://youtu.be/HVttKXtRji0


說明
AR 實例 - 四個按鈕製作
將二張辨識圖印在一張A4紙。
沒有按任何按鈕,當手機拍到上面的辨識圖,會出現生日快樂影片。離開時,停止播放。
當手機拍到下面的辨識圖,會出現女孩跳舞的動畫,且另外再播一首背景音樂。離開時,停止動畫和播放背景音樂。
在手機上製作四個按鈕,功能如下:
生日快樂 -祇有上面的辨識圖有作用。
女孩跳舞 - 祇有下面的辨識圖有作用。
停止辨識 - 停止上下二張辨識圖 的功能,即停止 AR  辨識。
打電話 (按鈕用一張圖呈現,如 logo圖)- 按下去,直接用手機打電話。
結束程式- 結束此 AR 程式。