Tenho acompanhado um curso de vídeo do Lynda.com para me familiarizar com o Unity. No momento, estou tentando obter uma referência à transformação do Controlador de primeira pessoa de uma cena da seguinte maneira:

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

E isso está dentro de um script / classe que herda de MonoBehaviour. No entanto, isso dá o erro:

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

Tenho certeza de que há uma maneira de apenas mudar a lógica e obter o efeito desejado com uma abordagem diferente. Mas não entendo por que isso resulta em um erro. É o mesmo código usado pelo instrutor do curso e, na Referência do Unity Script, posso ver que MonoBehaviour herda um gameObject membro que possui o método Find(). Portanto, este erro está dizendo que há apenas uma GameObject instância para todas as MonoBehaviour classes, certo? Mas eu ainda não deveria ser capaz de chamá-los de métodos?

Estou usando Unity 4.1 com C # enquanto o instrutor está usando 3.5 (com JS) se isso ajudar.

Comentários

  • Sim, como diz Benjamin, é ' é quase o mesmo código que o instrutor usa. Apenas um G maiúsculo deve resolver você. Lembre-se de sempre ler suas mensagens de erro, " não pode ser acessado com uma referência de instância, qualifique-o com um nome de tipo " está dizendo exatamente o que ' está errado e exatamente como corrigi-lo.

Resposta

Na verdade, você acabou de cometer um erro de digitação. gameObject é o GameObject atual ao qual seu script está anexado. GameObject é o tipo. A mensagem de erro está dizendo que a função Find(string) só funciona quando é chamada no tipo (GameObject) não uma instância do tipo ( gameObject).

Simplificando, use GameObject.Find("First Person Controller") em vez de gameObject.Find("First Person Controller").

Comentários

  • Ah, sim, na verdade, tentei fazer isso logo após postar e ler a mensagem de erro com mais clareza. Ele corrigiu o erro, mas talvez fosse permitido no 3.5 ou com js, porque definitivamente não ' gerou um erro para ela. Obrigado pela resposta!
  • JavaScript pode ser bastante complicado e imprevisível às vezes. Eu acredito que ele permite que você use instâncias para acessar métodos estáticos, o que é um pouco não intuitivo porque a instância não é realmente usada. Eu sugiro trabalhar com C # simplesmente por sua regularidade.

Resposta

Transformar targetObject;

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *