New UI, checking a text

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.CachedInvokableCall1[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 :slight_smile:

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 :stuck_out_tongue: