Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

314
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!