Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

A Unity da erro quando tento criar um raio

O erro acontece no trecho: Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(raio.origin, raio.direction, Color.red); Na Unity diz: Assets\Scripts\Jogador.cs(39,27): error CS0117: 'Camera' does not contain a definition for 'main'

6 respostas

Olá, tudo bem?

Você consegue colar o script completo aqui?

Confere se a sua câmera no inspector tem a tag MainCamera (pode ser selecionada perto do nome)

Ela possui a tag de MainCamera

Script Jogador.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jogador : MonoBehaviour
{
    private float x;
    private float z;
    private Vector3 direcao;
    [SerializeField]
    private float velocidade;
    private Animator animacao;
    private Rigidbody fisica;

    private void Awake() {
        this.fisica = GetComponent<Rigidbody>();
        this.animacao = GetComponent<Animator>();
    }

    private void Update() {
        this.x = Input.GetAxis("Horizontal");
        this.z = Input.GetAxis("Vertical");
        this.direcao = new Vector3(this.x, 0f, this.z);

        this.fisica.MovePosition(this.fisica.position + (this.direcao * Time.deltaTime * this.velocidade));

        if (this.direcao != Vector3.zero)
        {
            this.animacao.SetBool("Andando", true);
        } else
        {
            this.animacao.SetBool("Andando", false);
        }
    }

    private void FixedUpdate() {
        this.fisica.MovePosition(this.fisica.position + (this.direcao * Time.deltaTime * this.velocidade));

        Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(raio.origin, raio.direction, Color.red);
    }
}

Script Camera.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Camera : MonoBehaviour
{
    [SerializeField]
    private GameObject jogador;
    private Vector3 distancia;
    
    void Start()
    {
        this.distancia = this.transform.position - this.jogador.transform.position;
    }

    void Update()
    {
        this.transform.position = this.jogador.transform.position + this.distancia;
    }
}
solução!

Ah é isso, o script não pode chamar Camera senão você tá priorizando o seu script ao invés do da Unity, aí você teria que fazer UnityEngine.Camera.main....

Eu recomendaria dar um novo nome pro seu script (lembra que tem que renomear a classe e o script pro mesmo nome) mas ambas as opções funcionam.

Bons estudos!

Muito obrigado Henrique!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software