2015-07-20 75 views
0

我正在創建一個將成爲策略遊戲的3D遊戲。我想通過代碼(C#)創建一個面板(一組文本和按鈕的UI組),然後將它們移動到Canvas佈局中的GameObject頂部。所以我這樣做:實例化後移動UI組件

if (ThisBuilding == null) 
    ThisBuilding = this.gameObject; 
Panel = Canvas.Instantiate(Panel); 
Panel.transform.SetParent(canvas.transform, false); //false to prevent stupid scaling issues created by the parent change 

Vector3 centerPosition = ThisBuilding.GetComponentInChildren<MeshRenderer>().bounds.center; //the building GameObject contains a MeshRenderer component in its only children. 
panelRect.anchoredPosition = Vector3.Lerp(panelRect.anchoredPosition, centerPosition, 1.0f); 

的事情是,這個腳本的運行(在開始()),每建築一次,希望該小組將被實例化了3次,每個小組對應於一個建築,但對於一些奇怪的原因,這是行不通的。
預期結果:每個面板被實例化時,該位置是相同實例化它建築物(建築物遊戲物體保持腳本和開啓/關閉面板)
實績:即使面板確實實例化了3次,因爲它們都處於相同位置,即使Update()函數改變其位置也不會改變。我究竟做錯了什麼?

回答

2

給予建築物的世界位置導致面板基本位於屏幕上的相同位置。所需要的是計算屏幕位置的世界位置,並使用計算出的屏幕位置來放置面板。

嘗試這樣:

panel.transform.position = Camera.main.WorldToScreenPoint(this.gameObject.transform.position); 
+0

人!這工作完美!非常非常感謝你!它的工作完美無瑕! –

+0

不客氣,我很高興我能幫到你! –