实例化后移动UI组件

时间:2015-07-20 21:31:42

标签: c# unity3d

我正在制作一款将成为战略游戏的3D游戏。我想通过代码(C#)创建一个面板(一组文本和按钮的UI组),然后移动它们,使它们位于Canvas布局中的GameObject之上。所以我这样做:

 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);

问题是这个脚本在每个建筑物上运行一次(在Start()上),希望面板可以实例化3次,每个面板对应一个建筑物,但由于一些奇怪的原因,这不起作用。
预期结果:每次实例化面板时,其位置与实例化它的建筑物相同(建筑物GameObject保存脚本并激活/停用面板)
ACTUAL RESULT :即使面板确实实例化了3次,它们也处于相同的位置,即使我的Update()函数改变其位置也不会改变。我做错了什么?

1 个答案:

答案 0 :(得分:2)

赋予建筑物的世界位置导致面板基本上位于屏幕上的相同位置。我们需要的是计算屏幕位置的世界位置,并使用计算的屏幕位置来放置面板。

尝试这样的事情:

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