У меня есть 2 класса, прикрепленных к 2 разным графическим интерфейсам, PlayerInfoGUI и DiplomacyGUI.
Я пытаюсь использовать метод PlayerInfoGUI для динамического создания списка кнопок, который при нажатии будет вызывать DiplomacyGUI. (Оба графических интерфейса, а также динамические кнопки имеют свои собственные префабы)
Мой класс 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 срабатывает при нажатии, но игровой объект дипломатииМеню не отображается в сцене. Большинство исследований, которые я читал, говорят, что это должна быть простая дипломатияMenu.SetActive(true) или дипломатия.gameObject.SetActive(true), но это не работает.
Я подтвердил, что код выполняется, но объект не виден. Заранее спасибо!
Object Instance
, однако вы меняете свое состояниеPrefab's
. Вместо этого вы должны сделать так, как вы сделали выше, и создать экземплярObject instance
вашегоPrefab
, а затем изменить состояние этого экземпляра. - person Hristo   schedule 09.04.2018