網頁

2019年8月26日 星期一

Unity 程式設計教學- 如何使用 Virtual Button(虛擬按鈕)

題目:
在辨識圖左下方放一個虛擬按鈕,當手機鏡頭掃描到此按鈕,可以執行一些動作,如自動打電話。
步驟:
在 Hierarchy視窗,選 辨識圖(Target_unitychan)。在 Inspector 視窗,按 「Advanced」展開,再按「Add Virtual Button」。
更改 Virtual Button 的名字為 vb1。
Name  也改為 vb1, Sensitivity Setting 先選 LOW, Turn Off Behaviour 取消打勾。
匯入進來的圖形 circle_phone 的 Texture Type 改為  Sprite(2D and UI)。
Virtual Button 預設的材質是 VirtualButtonPreviewMaterial,是淺藍色,若要改成其它材質,可按 Element 0 此欄位右邊的小圓點圖示,改成其它材質。目前不用改。
把  VirtualButtonPreviewMaterial 改成其它圖示
按 VirtualButtonPreviewMaterial 右邊小齒輪圖示,選「Select Material」。
按「VirtualButtonPreviewMaterial」,按「Select」。
選 「circle_phone」,Scene 視窗中的 VirtualButton也變成 電話圖示。
移動和調整 Virtual Button,放在左下方。
在 Project視窗,選 「Script」,按右鍵,選「Create/ C# Script」,新增 Script。
新的 Script 更名為  VirtualButtonHandler,並連按二下以輸入程式。
程式如下:


using UnityEngine;
using System.Collections;
using Vuforia;
using System;
public class VirtualButtonHandler : MonoBehaviour, IVirtualButtonEventHandler
{
    private void Start()
    {
        //建立虛擬按鈕物件並取得其子元素的組件
        VirtualButtonBehaviour[] vbs = transform.GetComponentsInChildren();

        foreach (VirtualButtonBehaviour vb in vbs)
        {
            //註冊虛擬按鈕事件處理
            vb.RegisterEventHandler(this);
        }
    }

    public void OnButtonPressed(VirtualButtonBehaviour vb)
    {
        if (vb.name == "vb1")
        {
            Application.OpenURL("tel://0422223307");
            Debug.Log(vb.name + "按鈕被按下");
        }
    }

    public void OnButtonReleased(VirtualButtonBehaviour vb)
    {
        Debug.Log(vb.name + "按鈕被放開");
    }
}

上面程式中要改成 : transform.GetComponentsInChildren<virtualbuttonbehaviour>();

按「附加至 Unity」鈕,檢查程式有無錯誤。
先選辨識圖物件(Target_unitychan),將 VirtualButtonHandler 此Script,拖曳到Inspector視窗的下面。VirtualButtonHandler Script 必須綁定到 辨識圖物件(Target_unitychan)。
按「Play」鈕播放,看狀態列有無錯誤訊息,以此例子來說,出現 Trackable unitychan found,表示沒有錯誤。
選功能表的 File/Build Settings... 。按「Build」以建置發佈App。
最後產生 「dance_birth.apk」 此檔案,可上傳到手機上執行。(先上傳到雲端硬碟,再從手機下載或用 usb 連接線傳到手機)
切回到 Visual Studio,按「停止偵錯」鈕 。
檔案/全部儲存,把 所有 Scripts 全部儲存。
多個 Virtual Button
例如有二個 Virtual Button,dancevb 和 birthvb。
OnButtonPressed 此程序程式修改如下 :
   switch (vb.name)
        {
            case "dancevb":
                Application.OpenURL("tel://0422223307");
                break;
            case "birthvb":
                Application.OpenURL("http://www.tchcvs.tc.edu.tw");
                break;
        }
   Debug.Log(vb.name + "按鈕被按下");