Start behavior only working when one instance of UI in scene
Hi there,
I know I'm doing something obviously wrong but I can't seem to find the right words to search for.....so apologies for the n00bism.
I have a class with a simple start function that takes the text in a UI object I created and checks a static array in the Game Data object to pull some additional info.
void Start(){
UpgradeTitle = this.transform.FindChild("UpgradeTitle").GetComponent<Text>();
Debug.Log (UpgradeTitle.text);
for (int x = 0;x < GameConstants.DataList.Length;x++){
if(UpgradeTitle.text == GameConstants.DataList[x].UpgradeName){
ArrayValue = x;
x = GameConstants.DataList.Length;
}
}
Debug.Log (ArrayValue);
Now - when I run this for a single instance of the object (Where I've overwritten the text in the UpgradeTitle UI text box with "Inventory") it works fine. my Debug Reads
Inventory
2
OK.....seems like I've got it working. I now duplicate the object (It's still not connected to a Prefab) and change the text in UpgradeTitle to "Replenish".
The Debug runs the same for the first GameObject (Upgrade1). Excellent! However, for the other gameObject (Upgrade2) the first Debug fires OK and it returns "Replenish". However, I now get an error message saying Object reference not set to an instance of an object (referencing the if function) and the second Debug doesn't fire.
Neither UpgradeTitle nor ArrayValue value are public objects....
Why will it work for the first object but not the second? What am I doing wrong?
$$anonymous$$aybe GameConstants.DataList
has a null item in one of its indexes?
If the null is in the array after the 'inventory' object, only the second object will break because the first object exits the loop before trying to check the`UpgradeName` of a null item.
P.S. you can use the break;
keyword to exit any loop ins$$anonymous$$d of doing something to satisfy the its exit condition like you do now.
Hey Nose$$anonymous$$ills - thanks for the reply....
Using break worked!!!!!!!!
So for future learning: How come even though the UpgradeController script I posted above is attached to 2 seperate UI Objects and has no static properties, does it seem to be sharing the value of 'x' in the for
loop, even though there doesn't seem to be a way for the two scripts to talk to each other (both of the UI elements are broken from any prefabs)? Is this something unique to the Canvas Object?
Your answer

Follow this Question
Related Questions
how to make content fit a UI panel 0 Answers
detect any UI action 1 Answer
Dynamic Menu C# 0 Answers
i cant put text into a ui text thru a c# script 0 Answers
Is it wise to make a game with UI instead of regular GameObjects? 0 Answers