He estado siguiendo un curso de video de Lynda.com para familiarizarme con Unity. Actualmente estoy intentando tomar una referencia a la transformación del controlador en primera persona de una escena de la siguiente manera:

Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; } 

Y esto está dentro de un script / clase que hereda de MonoBehaviour. Sin embargo, esto da el error:

 Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead 

Estoy seguro de que hay una manera de simplemente cambiar la lógica y obtener el efecto deseado con un enfoque diferente. Pero no entiendo por qué esto resulta en un error. Es el mismo código que usó el instructor del curso y, a partir de la referencia de secuencia de comandos de Unity, puedo ver que MonoBehaviour hereda un gameObject miembro que tiene el método Find(). Entonces, este error dice que solo hay una GameObject instancia para todas las MonoBehaviour clases, ¿verdad? ¿Pero no debería todavía poder llamarlos métodos?

Estoy usando Unity 4.1 con C # mientras que el instructor usa 3.5 (con JS) si eso ayuda a alguno.

Comentarios

  • Sí, como dice Benjamin, ' es casi el mismo código que usa el instructor. Solo una G mayúscula debería resolverlo. Recuerde leer siempre sus mensajes de error, " no se puede acceder con una referencia de instancia, califíquelo con un nombre de tipo en su lugar " te dice exactamente qué ' está mal y exactamente cómo solucionarlo.

Respuesta

En realidad, acaba de realizar un simple error tipográfico. gameObject es el GameObject actual al que se adjunta su secuencia de comandos. GameObject es el tipo. El mensaje de error dice que la función Find(string) solo funciona cuando se llama en el tipo (GameObject) y no en una instancia del tipo ( gameObject).

En pocas palabras, use GameObject.Find("First Person Controller") en lugar de gameObject.Find("First Person Controller").

Comentarios

  • Ah, sí, de hecho probé esto poco después de publicar y leer el mensaje de error con mayor claridad. Solucionó el error, pero tal vez estaba permitido en 3.5 o con js, porque definitivamente no ' no generó un error para ella. ¡Gracias por la respuesta!
  • JavaScript puede ser bastante complicado e impredecible a veces. Creo que le permite usar instancias para acceder a métodos estáticos, lo cual es un poco intuitivo porque la instancia no se usa realmente. Recomiendo encarecidamente trabajar con C # simplemente por su regularidad.

Responder

Transform targetObject;

// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); } 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *