- Home /
Multiple gui instantiation issues
Ok so here's the basic problem I have a main canvas game object with 2 buttons 1 for gold mine and another for meeting hall. When I press these buttons I want a prefab info canvas to instantiate and update with the information for that specific button. So here are what my scripts look like just now
MtgHll button:
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class MtgHallButton : MonoBehaviour {
public GameObject InfoScreen;
public Button MtgHall;
public Sprite[] MtgHllvl;
private int mtglvl;
void Start()
{
mtglvl = GameStats.GameStatssc.MtgHalllvl;
MtgHall = GetComponent<Button>();
MtgHall.image.overrideSprite = MtgHllvl[Mathf.Abs(GameStats.GameStatssc.MtgHalllvl - 1)];
}
void Update()
{
mtglvl = GameStats.GameStatssc.MtgHalllvl;
MtgHall.image.overrideSprite = MtgHllvl[Mathf.Abs(GameStats.GameStatssc.MtgHalllvl - 1)];
}
public void UpgradeMtgHall()
{
if (GameStats.GameStatssc.MtgHalllvl <= 10)
{
Instantiate(InfoScreen);
InfoScreen.GetComponent<InfoMenu>().StatsTxt.text = "Level " + mtglvl.ToString();
GameObject.Find("SelectedGraphicImage").GetComponent<Image>().sprite = MtgHllvl[Mathf.Abs(GameStats.GameStatssc.MtgHalllvl - 1)];
}
}
}
Info Menu:
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class InfoMenu : MonoBehaviour {
public Text StatsTxt;
public Text DescTxt;
public Image InfoIcon;
public Button XButton;
public Button upgrdButton;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void X_buttonPress()
{
Destroy(gameObject);
}
public void Upg_button()
{
if (GameStats.GameStatssc.MtgHalllvl <10)
GameStats.GameStatssc.MtgHalllvl += 1;
GameStats.GameStatssc.Save();
Destroy(gameObject);
}
}
GameStats:
using UnityEngine; using System.Collections; using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO;
public class GameStats : MonoBehaviour { public static GameStats GameStatssc;
public int MtgHalllvl;
public int GoldMinelvl;
void Awake()
{
if (GameStatssc == null)
{
DontDestroyOnLoad(gameObject);
GameStatssc = this;
}
else if (GameStatssc != this)
{
Destroy(gameObject);
}
Load();
}
void OnEnable()
{
Load();
}
void OnDisable()
{
Save();
}
public void Save()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/TWarInfo.dat");
PlayerData data = new PlayerData();
data.MtgHalllvl = MtgHalllvl;
data.GoldMinelvl = GoldMinelvl;
bf.Serialize(file, data);
file.Close();
} public void Load() { if (File.Exists(Application.persistentDataPath + "/TWarInfo.dat")) { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/TWarInfo.dat", FileMode.Open); PlayerData data = (PlayerData)bf.Deserialize(file); file.Close();
MtgHalllvl = data.MtgHalllvl;
GoldMinelvl = data.GoldMinelvl;
}
}
}
[Serializable] class PlayerData { public int MtgHalllvl; public int GoldMinelvl; }
and the gold mine script is similar to the MtgHll script. So there are a couple of issues.
1 I would like a better way to change the instantiated image sprite. I feel like gameobject.find could have some issues.
2 I would like for the upgrade button to act uniquely on the button that made it so I can use the same button but for different upgradeable buildings
3 Whenever I click the button to instantiate the infoscreen I find that the current level is always 1 behind unless I destroy the object and instantiate it again then it's at the correct level and I need this to be current.
I appreciate any help that can be given on this. Thank you.
Your answer
![](https://koobas.hobune.stream/wayback/20220612085145im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to add string once to the UI text, but update the substring every frame in unity? 0 Answers
Instantiated UI objects with image components not appearing, rest of object works fine. 0 Answers
Text component changes the text but doesn't remove the previous version. 0 Answers
Text UI not updating 2 Answers
Why isn't the text preferred size calculating correctly? 0 Answers