方法:
請先看以下二篇文章
Unity 的程式設計 - 當沒偵測到辨識圖時,audio 和 video 組件停止播放
Unity 程式設計 - 按鈕綁定事件 Button Script 的應用
增加Text物件
選 Canvas(畫布),按右鍵,選 UI/Text。
更名為 KindText。
Font Size(大小): 20。
Horizontal Overflow : Overflow。 超過水平寬度,仍顯示在同一列。若是選 Wrap ,會自動換列。
Horizontal Overflow : Overflow。 超過垂直高度,仍會顯示。若是選 Truncate ,會被截斷。
Color (字的顏色): 紅色。
如何選顏色?
先選色環,再選顏色。
移動 KindText 的位置,在下面的 Game視窗可以看到結果。
選 KindText ,按右鍵,選 Duplicate(再製)。
更名為 TotalText ,Text 輸入: 有幾種圖卡被辨識。
移動 TotalText 的位置,在 Game視窗可以看到結果。
在Project 視窗,選 Script,按右鍵,選 Create/C# Script。
新 Script(腳本)更名為 : GlobalDataScript。
對此 Script連按二下,進入 Visual Studio。
輸入程式如下:
-----------------------------------------
static class GlobalData
{
public static int number = 0; // 所有圖卡被辨識的總次數
public static int[] VisitArray = new int[2]; //每一種圖卡被辨識的次數, 依本例來說 陣列索引值 0 :生日快樂 , 1: unitychan。
public static string[] NameArray = new string[]{"生日快樂", "unitychan" }; //每一種圖卡的名字,0 :生日快樂 , 1: unitychan。
}
-------------------------------------------------------
新增1個 Script,更名為 StopTargetScript。
程式如下:
--------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class StopTargetScript : MonoBehaviour {
private Text KindText; // 用來顯示 每一種圖卡被辨識的次數 此字串
private Text TotalText; // 用來顯示 有多少種圖卡被辨識 此字串
private GameObject birth, unitychan;
// Use this for initialization
void Start ()
{
birth = GameObject.Find("Target_birth");
unitychan = GameObject.Find("Target_unitychan");
KindText = GameObject.Find("KindText").GetComponent<Text>();
TotalText = GameObject.Find("TotalText").GetComponent<Text>();
KindText.text = "";
TotalText.text = "";
}
public void Click()
{
int number_of_visitedtarget = 0; //一開始,還沒有辨識任何圖卡,所以初始值設為0
string kindtext = "";
for (int i = 0; i < 2; i++)
{
if (GlobalData.VisitArray[i] > 0)
{
number_of_visitedtarget += 1;
}
kindtext = kindtext + GlobalData.NameArray[i] + "辨識" + GlobalData.VisitArray[i] + "次\n";
}
birth.SetActive(false);
unitychan.SetActive(false);
TotalText.text = "有" + number_of_visitedtarget + "種圖卡被辨識";
KindText.text = kindtext;
}
}
---------------------------------------------------
結果如下:
結果如下:
選 Button_stop 此物件,將 StopTargetScript 拖曳到 Inspector視窗的下面,如下:
按「+」。
選小圓點 圖示,輸入 button ,選 Button_stop 此物件。
按「No Function」,選「StopTargetScript」,選「Click()」。
在 Visual Studio中, 修改 BirthTrackedScript 中的 OnTrackableStateChanged 程序內容如下:
-------------------------------------------------------------------------------------------
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
//target tracked
videoPlayer.Play();
audioSource.Play();
// Debug.Log("Playing Video");
GlobalData.number += 1;
GlobalData.VisitArray[0] += 1;
}
else
{
//target lost
videoPlayer.Stop();
audioSource.Stop();
//Debug.Log("Not Playing Video");
}
}
-------------------------------------------------------------------------------------------
在 Visual Studio中, 修改 GirlTrackedScript 中的 OnTrackableStateChanged 程序內容如下:
在 Visual Studio中, 修改 GirlTrackedScript 中的 OnTrackableStateChanged 程序內容如下:
-------------------------------------------------------------------------------------------
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
//target tracked
audioSource.Play();
// Debug.Log("Playing Audio");
GlobalData.number += 1;
GlobalData.VisitArray[1] += 1;
}
else
{
//target lost
audioSource.Stop();
//Debug.Log("Not Playing Audio");
}
}
-------------------------------------------------------------------------------------------
在手機上執行結果解釋:
按了「停止辨識」按鈕,祇是把二種圖卡設為沒有 AR 作用,但仍有辨識的功能,所以祇要手機掃描到圖卡,就會增加1次。