1. 程式人生 > >Unity3D(通過Tag 標籤查詢物體)

Unity3D(通過Tag 標籤查詢物體)

1.Tag 簡介
Tag 標籤,就是一個標籤。標籤可以起到標識,區分的作用。
同一類的模型,我們可以根據需要給他們設定成統一的標籤。

2.給模型新增Tag 標籤
選中一個模型,在模型的Inspector 面板上的頂部位置,設定Tag 選項為一個
具體的標籤。
如果說引擎提供的標籤沒有自己想要的標籤,可以自己手動新增新標籤。

3.通過Tag 標籤查詢N 個物體
GameObject.FindGameObjectsWithTag(string):[靜態方法]
通過特定的標籤,查詢到所有“貼有”該標籤的遊戲物體,返回一個數組。
String:標籤名

4.for 迴圈輸出模型資訊
通過for 迴圈遍歷FindGameObjectsWithTag()方法返回的陣列,輸出
遊戲物體的資訊。

using UnityEngine;
using System.Collections;

public class DeskTrigger : MonoBehaviour {

private GameObject[] m_Desk;   //建立一個全部遊戲物件GameObject型別的陣列

void Start () {
    m_Desk = GameObject.FindGameObjectsWithTag ("Desks");   查詢所有關於Desk標籤的物件,儲存到陣列m_Desk

    /*
    for(int i = 0; i < m_Desk.Length; i++)  //遍歷陣列,輸出物件的名稱
    {
        Debug.Log (m_Desk[i].name);
    }
    */
}

void Update () {
    if(Input.GetKeyDown(KeyCode.Z))
    {
        //up.
        DesksUp();
    }

    if(Input.GetKeyUp(KeyCode.Z))
    {
        //down.
        DesksDown();
    }
}

void DesksUp()
{
    for(int i = 0; i < m_Desk.Length; i++)
    {
        //遍歷陣列,將陣列的全部物件以自身座標系整體向上乘2
        //gameObject
        m_Desk [i].GetComponent<Transform> ().Translate (Vector3.up * 2, Space.Self);
    }
}

void DesksDown()
{
    for(int i = 0; i < m_Desk.Length; i++)
    {
        //如上,將陣列整體向下乘2
        m_Desk [i].GetComponent<Transform> ().Translate (Vector3.up * -2, Space.Self);
    }
}

//觸發器實現標籤內所有物件的移動
void OnTriggerEnter(Collider coll)
{
    if(coll.gameObject.name == "Student")
    {
        DesksUp ();
    }
}

void OnTriggerExit(Collider coll)
{
    if(coll.gameObject.name == "Student")
    {
        DesksDown ();
    }
}

}