在 Unity 中开发 UI



我正在尝试使用Unity开发游戏,并且正在开发一些UI。我将需要一个玩家框架(用于显示我的回合制游戏中活跃玩家的头像(、一个物品栏和一个设置按钮及其设置屏幕。

玩家框架的事情很简单:我放置了一个画布和一个图像。但是,我希望在单击该帧时出现库存屏幕。因此,我创建了另一个画布,在里面放置了一架飞机,为物品栏设置了背景,并设置了一个关闭它的按钮。将显示清单面板,但是当我单击关闭按钮时,我收到错误。我的代码:

private void Awake()
{
canvas = GameObject.Find("Canvas");
inventoryPanel = GameObject.Find("InventoryPanel");
inventoryPanel.gameObject.SetActive(false);
this.raycaster = canvas.GetComponent<GraphicRaycaster>();
}

当我检测到 UI 组件中的单击时:

if (Input.GetMouseButtonDown(0))
{
PointerEventData pointerData = new PointerEventData(EventSystem.current);
List<RaycastResult> results = new List<RaycastResult>();
//Raycast using the Graphics Raycaster and mouse click position
pointerData.position = Input.mousePosition;
this.raycaster.Raycast(pointerData, results);
for(int i = 0; i < results.Count; i++)
{
print("Pulsada UI: "+results[i].gameObject.name);
if (results[i].gameObject.name.Equals("Playerframe"))
{
inventoryPanel.SetActive(true);
}
if(results[i].gameObject.name.Equals("Closeinventorybutton"))
{
inventoryPanel.SetActive(false);
}
}
}

当然,光线投射器是从第一个画布投射的,玩家帧所在的画布,物品栏在另一个画布中,光线投射器为空。

我尝试将库存屏幕放在第一个画布中,并以这种方式获取其引用:

inventoryPanel=canvas.gameObject.Find("InventoryPanel");

但似乎我做不到。

我是否需要为屏幕中的任何 UI 对象创建单独的画布,并从每个画布获取单独的光线投射器?所有 UI 组件的相同画布?如果是这样,如何获取对不同组件的引用?

我找不到比"按钮和健康栏"更进一步的教程。换句话说,如何创建一个复杂的UI?一个好的教程会很好。

您只需要一个画布,如果您想直观/分层地分割 UI 的某些部分,则可以使用面板。

编辑:获取对对象的引用的最简单方法

public GameObject inventoryPanel;

在检查器中,您可以从左上角的层次结构拖放到脚本"清单"面板中。其他选项

GameObject.FindWithTag("TagName"); 

当您想要引用组件用途时,这是一个很好的选择

inventoryPanel.GetComponent<componentType>().variableofcomponent..

最新更新