Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

318
Vistas
¿Cómo soluciono mi falla al encontrar un método válido en un script usando Object.FindObjectOfType de Unity?

Estoy tratando de hacer que TestGrab encuentre el script PlatformStateMachine y ejecute el método LoadChaptersMenu, pero la línea a continuación con el comentario tiene el error: El objeto no tiene una definición para LoadChaptersMenu, y ningún método de extensión acepta un primer argumento del objeto, bla, bla, error común. Sin embargo, no sé cómo no pude seleccionar o exponer el método.

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { public void TestGrab () { UnityEngine.Debug.Log("triggered"); object psm = Object.FindObjectOfType<PlatformStateMachine>(); psm.LoadChaptersMenu();// error shows up here }

PlatformStateMachine.cs:

 using System; using System.Collections.Generic; using UnityEngine; using System.IO; public class PlatformStateMachine : MonoBehaviour { public static void LoadChaptersMenu() { UnityEngine.Debug.Log("executed"); } }

Probablemente alguien pueda encontrar dónde se responde esto en otro lugar, pero con mi conocimiento limitado del problema, no pude encontrar esa solución en mis búsquedas. No puedo ejecutar el código en Unity para la depuración si hay un error sintáctico. No sé qué paso de solución de problemas tomar aparte de preguntar aquí.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Prueba.cs

 using UnityEngine; public class Test : MonoBehaviour { public void TestGrab() { Debug.Log("triggered"); var psm = FindObjectOfType<PlatformStateMachine>(); psm.LoadChaptersMenu(); } }

PlatformStateMachine.cs

 using UnityEngine; public class PlatformStateMachine : MonoBehaviour { public void LoadChaptersMenu() { Debug.Log("executed"); } }

En Test.cs, convirtió implícitamente PlatformStateMachine en un objeto, y el objeto es la superclase de todo y no tiene el método LoadChaptersMenu.

Dado que obtiene una instancia de PlatformStateMachine cuando usa FindObjectOfType, no desea usar un método estático, por lo que eliminé el modificador estático en PlatformStateMachine.cs. Si desea que el método sea estático, invóquelo de forma estática, como:

 PlatformStateMachine.LoadChaptersMenu();
over 4 years ago · Santiago Trujillo Denunciar

0

Estaría bien hacer una verificación después o antes de buscar el objeto. Por ejemplo:

 var psm = FindObjectOfType<PlatformStateMachine>(); if(psm == null) throw new System.Exception("Object of type " + typeof(PlatformStateMachine) + " not found!"); psm.LoadChaptersMenu()

Pero recomiendo hacer una referencia pública, para guardar de memoria. Porque FindObjectOfType consume mucha memoria cuando se llama. Perdón por mal inglés!!!

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda