【发布时间】:2018-09-18 08:11:12
【问题描述】:
我有 2 个类附加到 2 个不同的 GUI,PlayerInfoGUI 和 DiplomacyGUI。
我试图让 PlayerInfoGUI 中的一个方法动态地创建一个按钮列表,当点击它时会拉出 DiplomacyGUI。 (GUI 和动态按钮都有自己的预制件)
我的 PlayerInfoGUI 类使用 PopulatePlayerList 方法动态填充带有按钮的面板。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;
public class PlayerInfoGUI : MonoBehaviour
{
public Image[] guiElements;
public GameObject playerInfoButtonPrefab, canvasParent;
public GameObject diplomacyMenu;
void Awake ()
{
PopulatePlayerList (GameEngine.competingPlayers);
}
void PopulatePlayerList (List<CompetingPlayer> players)
{
for (int i = 0; i < players.Count; i++) {
GameObject go = (GameObject)Instantiate
(playerInfoButtonPrefab);
Button playerInfoButton = go.GetComponent<UnityEngine.UI.Button>
();
CompetingPlayer receivingPlayer = players [i];
playerInfoButton.onClick.AddListener (() => handleDiplomacyMenu
(receivingPlayer));
go.transform.SetParent (canvasParent.transform, false);
}
}
public void handleDiplomacyMenu (CompetingPlayer receivingPlayer)
{
diplomacyMenu.SetActive (true);
}
}
PlayerInfo 按钮上的侦听器在单击时触发,但外交菜单游戏对象未显示在场景中。我读过的大部分研究都说这应该是一个简单的 DiplomacyMenu.SetActive(true) 或一个 Diplomacy.gameObject.SetActive(true),但这不起作用。
我已确认代码正在运行,但无法看到对象。 提前谢谢你!
【问题讨论】:
-
发布你的代码而不是截图。
-
感谢您的反馈。编辑它。
-
前两个预制件,好像被保存为非活动状态。
-
您想要更改
Object Instance的状态,但是您正在更改Prefab's的状态。相反,您应该像上面所做的那样实例化您的Prefab的Object instance,然后更改该实例的状态。 -
我在 .setactive() 前面的 .Instantiate(diplomacyMenu) 上工作了,谢谢。
标签: c# unity3d unity3d-gui