- Home /
Search Game Inventory Button Object Text Strings
Howdy yall, My inventory system is a bunch of buttons in layout groups. I have a search input field, but I am having trouble capturing the string there... and Unity isn't "pointing straight at my problem."
This works to report all the button items' labels:
void UserSearchButton_onClick()
{
print("User Search: " + userSearchText.text);
foreach (Transform child in activatedMenuTransform.transform)
{
print("Text Object Name : " + child.gameObject.GetComponentInChildren<Text>().name);
}
}
But this reports "NullReferenceException: Object reference not set to an instance of an object"
void UserSearchButton_onClick()
{
print("User Search: " + userSearchText.text);
foreach (Transform child in activatedMenuTransform.transform)
{
if (child.gameObject.GetComponent<Text>().text.Contains(userSearchText.text))
{
print("Text Object Name : " + child.gameObject.GetComponentInChildren<Text>().name);
}
}
}
I also messed with if (child.gameObject.GetComponent().text.IndexOf(userSearchText.text) >1) but I get the same error.
Any ideas would be appreciated!
Answer by alwayscodeangry · Feb 23, 2020 at 01:30 AM
I notice that you're calling GetComponentInChildren on child
to reference the Text component in the print statement, but in the branch you added you're just calling GetComponent. I don't know your object hierarchy, but if child
doesn't have a Text component then that would explain the null reference.
Answer by WarOnGravity · Feb 23, 2020 at 12:56 PM
Thank you, thank you, thank you... I will try not to post proofreading questions frequently! To avoid tripping on that... I should probably get a looser with adding variables...
public void UpdateUserSearch()
{
print("User Search: " + userSearchText.text);
print("activatedMenuTransform.transform: " + activatedMenuTransform.transform.name.ToString());
var i = 0;
foreach (Transform child in activatedMenuTransform.transform)
{
var myText = child.gameObject.GetComponentInChildren<Text>().text;
if (myText != "Prefab'sText")
{
if (myText.Contains(userSearchText.text.ToString()))
{
print("Item #" + i + " reports..." + "\n" +
"1st Text Object Name : " + child.gameObject.GetComponentInChildren<Text>().name + //Returns name of Text Objects
" | Item Name: " + myText); //Returns content of Text Objects
}
}
i++;
}
}
This works awesome... now to flush out some features!
Thanks, again! Excellent username @alwayscodeangry! Very relatable.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Scripting button functionality inside class with created object's method 1 Answer
UI Decreasing Timer Bar Not Executing Print? 1 Answer
UI text showing money 2 Answers