在实例化UI组件后移动它

本文关键字:移动 组件 实例化 UI | 更新日期: 2023-09-27 18:03:34

我正在制作一款3D游戏,这将是一款策略游戏。我想通过代码(c#)创建一个面板(由一堆文本和按钮组成的UI组),然后移动它们,使它们位于画布布局中的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持有脚本并激活/停用面板)
实际结果:即使面板确实被实例化了3次,它们都在相同的位置,即使我的Update()函数改变了它的位置也不会改变。我做错了什么?

在实例化UI组件后移动它

给出建筑的世界位置会导致面板在屏幕上的位置基本相同。我们需要的是计算世界位置到屏幕位置,并使用计算出的屏幕位置来放置面板。

试试这样写:

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