I’m switching from OnGUI to the new UI and I have a problem checking a text.
I’m using the code below to check the content of a text, if the text is different from “New game”, then it should set a button interactable:
if (gamesPanel.transform.Find(“Panel/Slot03Button/Text”).GetComponent().text != “New game”)
{
gamesPanel.transform.Find(“Panel/DeleteButton”).GetComponent().interactable = true;
}
It gives no errors, it doesn’t work though. I tried to store the text into a string and then check the string, it still doesn’t work.
This is the OnGUI code which I use and works 100%:
if (stringSlot03 != “New game”) deleteEnabled = true;
Any ideas? Thanks.
// Put UI Text Object Here
Text text;
Button btn;
void Awake()
{
text = GetComponent<Text>();
}
void Update()
{
if (text.text != "New Game")
btn.interactable = true;
else
btn.interactable = false;
}
i wrote this via my phone so it might not be accurate. let me know
It works, it gives an error at your 12th line: if (text.text != “New game”)
Error:
NullReferenceException: Object reference not set to an instance of an object
MainMenu.Slot03Button (UnityEngine.GameObject gamesPanel) (at Assets/Scripts/MainMenu.cs:149)
UnityEngine.Events.InvokableCall1[UnityEngine.GameObject].Invoke (System.Object[ ] args) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:141) UnityEngine.Events.CachedInvokableCall
1[UnityEngine.GameObject].Invoke (System.Object[ ] args) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:259)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[ ] parameters) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:576)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[ ] parameters) (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent.cs:718)
UnityEngine.Events.UnityEvent.Invoke () (at C:/BuildAgent/work/d63dfc6385190b60/Runtime/Export/UnityEvent_0.cs:53)
UnityEngine.UI.Button.Press () (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/EventSystem/ExecuteEvents.cs:52)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/BuildAgent/work/d63dfc6385190b60/Extensions/guisystem/guisystem/EventSystem/ExecuteEvents.cs:269)
UnityEngine.EventSystems.EventSystem:Update()
This is the code:
public Text text;
public Button btn;
public void Slot03Button(GameObject gamesPanel)
{
slotNumber = 3;
gamesPanel.transform.Find("Panel/Slot01Button/Image").GetComponent<Image>().enabled = false;
gamesPanel.transform.Find("Panel/Slot02Button/Image").GetComponent<Image>().enabled = false;
gamesPanel.transform.Find("Panel/Slot03Button/Image").GetComponent<Image>().enabled = true;
gamesPanel.transform.Find("Panel/Slot04Button/Image").GetComponent<Image>().enabled = false;
gamesPanel.transform.Find("Panel/Slot05Button/Image").GetComponent<Image>().enabled = false;
gamesPanel.transform.Find("Panel/DeleteButton").GetComponent<Button>().interactable = false;
text = GetComponent<Text>();
if (text.text != "New game")
{
btn.interactable = true;
}
//if ((gamesPanel.transform.Find("Panel/Slot03Button/Text").GetComponent<Text>().text != "New game") && (gamesPanel.transform.Find("Panel/DeleteButton").GetComponent<Button>().interactable == false))
//{
// gamesPanel.transform.Find("Panel/DeleteButton").GetComponent<Button>().interactable = true;
//}
if (gamesPanel.transform.Find("Panel/PlayButton").GetComponent<Button>().interactable == false)
{
gamesPanel.transform.Find("Panel/PlayButton").GetComponent<Button>().interactable = true;
}
}
Thanks for your help 
I think the check doesn’t work because the text inside the text field is not a string but a line, which means if I write “New game” inside the field and print it via script adding “END” it doesn’t print this:
New gameEND
It prints this:
New game
END
Which means if I check if the text is not “New game”, it will always return true, even if the text is “New game”.
So, is there a way to check only the words of a line of text and not the entire line? Hope it makes sense 