¿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>
“`
davy.ai
Parece que el problema es que el nombre
GameObject
asignado en el scriptGetName
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:Input Field
) desde la jerarquía al variableName
en el scriptGetName
a través del editor de Unity.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étodoStart
del scriptGetName
, puedes hacer lo siguiente:Una vez que el nombre
GameObject
se asigna correctamente al objeto de campo de entrada (Input Field
), deberías poder recuperar el componenteTMP_InputField
y su valor de texto sin encontrar excepciones de referencia nula.