2014-06-17 46 views
-1

我創建了2個立方體(立方體1,立方體2)。當我將鼠標移到立方體1或立方體2上時,我想在GUI框中顯示其名稱。該名稱將顯示在控制檯中,但不是在我的GUI箱使用下面的代碼:在GUI框上顯示對象的名稱

Public class Label : MonoBehaviour 
{ 
    public string collidedmesh; 

    // Use this for initialization 
    void Start() 
    { 
     collidedmesh=transform.name; 
     Debug.Log("........"+collidedmesh); 
    } 

    void OnGUI() 
    { 
     GUI.Box(new Rect(300, 100, 100, 20),""+collidedmesh); 
    } 

    void OnMouseDown() 
    { 
     OnGUI(); 
    } 
} 

輸出是

enter image description here

+1

什麼是_not working_ exactly? –

+0

你看到屏幕上的框?你爲什麼要將該名稱添加到空字符串? –

+0

是的,但多維數據集1和多維數據集2打印在同一個盒子上...可以給你想法... –

回答

1

你渲染所有的箱子在同一位置。通過參考transform.position並將其傳遞到Camera.WorldToScreenPoint()以獲得screen-space來使用相對位置。

void OnGUI() 
{ 
    Vector3 screenCoord = Camera.main.WorldToScreenPoint(transform.position); 
    GUI.Box(new Rect(screenCoord.x, screenCoord.y, 100, 20),collidedmesh); 
} 

另外做"" + collidedmesh是一種浪費的操作,只需使用collidedmesh代替。

+0

公開課Raycast:MonoBehaviour { \t public string collidedmesh; \t \t \t空隙OnGUI() \t { \t \t的Vector3 screenCoord = Camera.WorldToScreenPoint(transform.position); (新的Rect(screenCoord.x,screenCoord.y,100,20),collidedmesh); \t} \t}當我將此代碼拖入cube1和cube2時,出現如下錯誤:「需要訪問非靜態成員的對象引用UnityEngine.Camera.WorldToScreenPoint(UnityEngine.Vector3)'」 –

+0

當我將鼠標懸停在多維數據集1或多維數據集2上我想在GUI框中顯示其名稱。但在這個代碼中你使用鼠標懸停條件/功能。 –

+0

此代碼將被添加到您的代碼中。只需用我的版本替換ONGUI功能即可。 –

0

當你將鼠標懸停或當你點擊它時,你想要顯示該框的名稱?

你的問題是雙重的:
- 自動調用nGUI,所以你不能像這樣調用它;它的發生與
- 你使用的OnMouseDown,只有當你有效地點擊對象時才被調用

因此,修復它們,刪除OnMouseDown()函數。 一個布爾值添加到您的代碼的頂部,如

bools isHovering = false; 

然後,在你OnGUI()函數中,GUI.Box前添加一個if語句,就像這樣:

if(isHovering) 
{ 
    GUI.Box(new Rect(300, 100, 100, 20),""+collidedmesh); 
} 

最後,同時添加OnMouseEnter在()和OnMouseExit(),將設置取決於鼠標是否懸停在對象或沒有,像這樣的布爾值:

void OnMouseEnter() 
{ 
    isHovering = true; 
} 

void OnMouseExit() 
{ 
    isHovering = false; 
} 

這樣,當你將鼠標懸停在這樣mething,bool設置爲true,激活顯示對象名稱的GUI.Box。當你停在它上面時,布爾被設置爲false,停用GUI.Box。祝你好運。