es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puedo obtener el componente “Text” de un campo de entrada?

Tengo un campo de entrada TextMeshPro pero mis varios intentos de obtener el componente Text están produciendo excepciones de referencia nulas. El campo de entrada se llama Nombre. Referencio este objeto cuando el jugador hace clic en OK después de enviar su nombre.
Aquí está el script GetName:
“`
public class GetName : MonoBehaviour
{
GameObject Nombre;

<pre><code>// Estos dos son restos de intentos anteriores.
public TextMeshProUGUI player_name;
public TMP_InputField player_inputField;

private string apodo;

// La función entera debería ser menos molesta que un bool cuando se llama desde otro script.

public int ¿ElNombreEstáVacío()
{
apodo = Nombre.GetComponent<TMP_InputField>().text.ToString();

// El programa nunca llega hasta aquí.
</code></pre>

<code>
La función OK en el otro script es:
</code>
public class WelcomeButtons : MonoBehaviour
{
public GetName obtenerNombre;

<pre><code>void TaskOnClick6()
{
Debug.Log("¡Has hecho clic en el botón OK!");

int ¿esNombreVacio = obtenerNombre.¿ElNombreEstáVacío(); // Causa una excepción de referencia nula.

// El programa nunca llega hasta aquí.
</code></pre>

“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que el nombre GameObject asignado en el script GetName nunca se asigna realmente al objeto de campo de entrada (Input Field) en la escena.

    Para solucionar esto, necesitas asignar el nombre GameObject al objeto de campo de entrada (Input Field) en la escena. Esto se puede hacer de varias formas:

    1. Arrastra y suelta el objeto de campo de entrada (Input Field) desde la jerarquía al variable Name en el script GetName a través del editor de Unity.
    2. Usa el método Find para encontrar el objeto de campo de entrada (Input Field) por su nombre durante la ejecución. Por ejemplo, en el método Start del script GetName, puedes hacer lo siguiente:

      void Start()
      {
         Name = GameObject.Find("Name"); // Asume que el objeto de campo de entrada (`Input Field`) se llama "Name" en la jerarquía.
      }
      

    Una vez que el nombre GameObject se asigna correctamente al objeto de campo de entrada (Input Field), deberías poder recuperar el componente TMP_InputField y su valor de texto sin encontrar excepciones de referencia nula.

Comments are closed.