延續這篇文章,一樣使用Vuforia~
選擇 Vuforia → Prefabs → VirtualButton,並拖曳到ImageTarget上成為其子物件(在此放兩個VirtualButton)
並將第一個命名為VB1,第二個為VB2
請記得!命名完畢後要在它們的Name也進行修改,同樣改為VB1和VB2
(這個Name為程式本身要辨識是哪顆Button使用)
若要取得這個紅框處的名稱則使用VirtualButtonName
若是使用Name則只會取得 VB1 這個名稱
之後會再ImageTarget正中央發現兩個圖案,我將VB1拉到左上放置、VB2拉到左下放置
這兩個圖案就是Button的位置了!
再來新增一個C# script,命名為ButtonEventPractice,並引入Vuforia這個命名空間,且實作這個空間所提供的IVirtualButtonEventHandler介面
對此介面按下F12,可以看到該介面內有兩個方法
OnButtonPressed 為虛擬按鈕被按下時會呼叫的方法
OnButtonReleased 為虛擬按鈕被放開時會呼叫的方法
而且這兩個方法都會傳入被按下的按鈕物件vb,由此物件可取得Name
都了解後就開始撰寫程式碼了!
using UnityEngine;
using Vuforia;
public class ButtonEventPractice : MonoBehaviour, IVirtualButtonEventHandler
{
private void Start()
{
//建立虛擬按鈕物件並獲得其子元素的組件
VirtualButtonBehaviour[] vbs = transform.GetComponentsInChildren<VirtualButtonBehaviour>();
foreach (VirtualButtonBehaviour vb in vbs)
{
vb.RegisterEventHandler(this);//註冊虛擬按鈕事件處理
}
}
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)
{
Debug.Log(vb.name + " 按鈕被按下");//列印出是哪個虛擬按鈕被按下
}
public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)
{
Debug.Log(vb.name + " 按鈕被放開");//列印出是哪個虛擬按鈕被放開
}
}
之後將此程式碼托放到ImageTarget上,按下執行或輸出成apk放到Android上執行皆可!

請問引入Vuforia這個命名空間 是代表把它丟進Vuforia資料夾裡面嗎 最近看網路上的小蜜蜂射擊教學看不太懂 http://www2.ic.tku.edu.tw/learning/modules/newbb/dl_attachment.php?attachid=1425804608&post_id=4680 說要Controller.cs 腳本首先要繼承 IVirtualButtonEventHandler 的介面並 覆寫 OnButtonPressed() 和 OnButtonReleased() 兩個事件,OnButtonPressed() 為虛擬按鈕按下,OnButtonReleased() 為放開虛擬按鈕。 這一段我不太懂
1.就是using Vuforia; 2.這是物件導向的基本觀念─Implement interface(實作介面),你可以去查一下「介面」的介紹就知道了
請問最後一段要加入程式碼的部分我不是很懂, 是要在Imagetarget下面加入原件>>new script, 然後把它命名為ButtonEventPractice, 然後在新的script裡面撰寫 using UnityEngine; using Vuforia; namespace Vuforia { public interface IVirtualButtonEventHandler { void OnButtonPressed(VirtualButtonAbstractBehaviour vb); void OnButtonReleased(VirtualButtonAbstractBehaviour vb) } } 然後在加上下面這段 public class ButtonEventPractice : MonoBehaviour, IVirtualButtonEventHandler { ...... 嗎? 希望你的教學可以更明確。PS:我是unity新手,若有不懂請你指導。感謝
程式碼全部就只有我文章寫到的那些而已 using UnityEngine; using Vuforia; public class ButtonEventPractice : MonoBehaviour, IVirtualButtonEventHandler { private void Start() { //建立虛擬按鈕物件並獲得其子元素的組件 VirtualButtonBehaviour[] vbs = transform.GetComponentsInChildren<VirtualButtonBehaviour>(); foreach (VirtualButtonBehaviour vb in vbs) { vb.RegisterEventHandler(this);//註冊虛擬按鈕事件處理 } } public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) { Debug.Log(vb.name + " 按鈕被按下");//列印出是哪個虛擬按鈕被按下 } public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) { Debug.Log(vb.name + " 按鈕被放開");//列印出是哪個虛擬按鈕被放開 } }
上面的留言我已經解決了, 不過我輸出成功到手機上後,我Virtual Button卻沒有出現。 如圖 : http://pic.pimg.tw/tars/1468131110-1808388004_l.jpg?v=1468131117 我有少設定什麼嗎?請你指教。
印象中虛擬按鈕本身不會出現,但你的手移到那邊還是會有動作。 (有一段時間沒有碰AR了,不太確定。或是等我有空時再重新試試看)
你好,我想請問 一開始實境的時候沒任何東西,但碰到虛擬按鈕的時候會跑出圖片這個可以怎麼寫呢?
文章最後面 OnButtonPressed 為虛擬按鈕被按下時會呼叫的方法 OnButtonReleased 為虛擬按鈕被放開時會呼叫的方法 而且這兩個方法都會傳入被按下的按鈕物件vb,由此物件可取得Name 你看這兩個去做