2017年12月8日 星期五

如何得知擴增實境功能有被啟用?


擴增實境是採用Vuforia工具,如何在程式中,如何得知Vuforia AR效果有沒有被啟動呢?這是本篇文章的教學重點。

您點選下圖左方的Field,可以看到內嵌一個PolygonField.cs程式。在PolygonField.cs的程式中,可以看到宣告一個公開的GameObject變數,命名為go_raw,因此在下圖中,可以看到Go_raw屬性,並宣告5個元素,這5個元素分別對應到ImageTarget內的圖片,如下圖。go_raw宣告如下:

public GameObject[] go_raw;


在Update()函式中,我們可以看,用getAllAvailablePoints()取得那些標籤有被偵測出來,換句話說是有AR效果,收集這點資訊,供後續畫線及計算使用。

void Update () {
getAllAvailablePoints ();
draw ();
drawLines ();
calculation ();
}

利用go_raw來對應到AR標籤物件,再使用enabled屬性值來判斷是否有AR效果,下面程式就是利用這個技巧,來取得有AR效果的標籤物件,再決是否把角度和距離的物件啟用,最後把收集到的資料轉成陣列。

private void getAllAvailablePoints(){
// Create new Vector2 and Text Lists
List vertices2DList = new List();
List textAList = new List();
List textDList = new List();
List oList = new List();

// Fill lists if availble
for(int i = 0; i < go_raw.Length; i++){
if (go_raw [i] != null) {
if (go_raw [i].GetComponent ().enabled) {
go_text_angle [i].enabled = true;
go_text_distance [i].enabled = true;

vertices2DList.Add (new Vector2 (go_raw [i].transform.position.x, go_raw [i].transform.position.y));
textAList.Add (go_text_angle [i]);
textDList.Add (go_text_distance [i]);
oList.Add ( go_raw [i] );
} else {
go_text_angle [i].enabled = false;
go_text_distance [i].enabled = false;
}
}
}

// Convert to array
go_points_text_a = textAList.ToArray ();
go_points_text_d = textDList.ToArray ();
go_points = vertices2DList.ToArray ();
go_n = oList.ToArray ();
}


沒有留言:

張貼留言