【问题标题】:GameObject prefab is not showing in scene when activated in my script在我的脚本中激活时,GameObject 预制件未在场景中显示
【发布时间】: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),但这不起作用。

我已确认代码正在运行,但无法看到对象。 提前谢谢你!

PlayerInfoPrefab

PlayerInfoButtonPrefab

DiplomacyPrefab

【问题讨论】:

  • 发布你的代码而不是截图。
  • 感谢您的反馈。编辑它。
  • 前两个预制件,好像被保存为非活动状态。
  • 您想要更改Object Instance 的状态,但是您正在更改Prefab's 的状态。相反,您应该像上面所做的那样实例化您的PrefabObject instance,然后更改该实例的状态。
  • 我在 .setactive() 前面的 .Instantiate(diplomacyMenu) 上工作了,谢谢。

标签: c# unity3d unity3d-gui


【解决方案1】:

当 DiplomacyMenu 已经是一个游戏对象时,您正在使用 DiplomacyMenu.gameObject,这可能会导致问题。还要确保由外交菜单表示的预制件启用了其子项。我认为 SetActive() 只是将顶级父级设置为启用,而不是任何嵌套对象。

【讨论】:

  • 我同时使用了 DiplomacyMenu.gameObject.SetActive() 和 DiplomacyMenu.SetActive() 似乎都不起作用,但我对用法感到困惑。谢谢你澄清这个。我试图拉出的外交菜单是父对象,所以那里没有问题。
  • 没问题,我也不认为我的答案应该被标记为最佳答案。我的回复似乎没有直接解决您的问题。
猜你喜欢
  • 2023-03-20
  • 2022-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多