NullReferenceException: Object reference not set to an instance of an object tag RayCast
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
NullReferenceException: Object reference not set to an instance of an object tag RayCast
Eae galera,
Estou com um problema que não consigo nem a pau resolver. No último "if" faço uma comparação de distância e verifico se está dentro do esperado, em seguida comparo a "tag" de um tipo de objeto que está na mira, se a distância está OK e a tag é Objeto, Mover ou Andar eu executo o "if". Só que aparece a mensagem de erro abaixo sempre quando realizo a comparação de "tag".
NullReferenceException: Object reference not set to an instance of an object
Mira.Update () (at Assets/Scripts/Jogador/Mira/Mira.cs:92)
Alguém sabe se estou realizando a comparação com a sintaxe errada ou a forma não indicada?
Estou com um problema que não consigo nem a pau resolver. No último "if" faço uma comparação de distância e verifico se está dentro do esperado, em seguida comparo a "tag" de um tipo de objeto que está na mira, se a distância está OK e a tag é Objeto, Mover ou Andar eu executo o "if". Só que aparece a mensagem de erro abaixo sempre quando realizo a comparação de "tag".
NullReferenceException: Object reference not set to an instance of an object
Mira.Update () (at Assets/Scripts/Jogador/Mira/Mira.cs:92)
Alguém sabe se estou realizando a comparação com a sintaxe errada ou a forma não indicada?
- Código:
void Update () {
//Variavel do tipo RayCast
RaycastHit PontoDeColisao;
//Recebe o calculo de previsao de colisao
Physics.Raycast (transform.position, transform.forward, out PontoDeColisao, 50);
//Calcula posicao do alvo
PontoFinalDoRaio = transform.position + transform.forward*DistanciaAjustada;
//Caso esteja na distancia estabelecida, permite movimentar o objeto
float teste = Vector3.Distance (transform.position, PontoDeColisao.point);
if (teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Objeto" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Mover" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Andar"){
}
#N31- Membro
- PONTOS : 3389
REPUTAÇÃO : 11
Idade : 30
Respeito as regras :
Re: NullReferenceException: Object reference not set to an instance of an object tag RayCast
se você der 2 cliques no erro, ele acusa qual linha?
Tem como postar o código inteiro para vermos?
Tem como postar o código inteiro para vermos?
Re: NullReferenceException: Object reference not set to an instance of an object tag RayCast
O erro estava sendo acusado nesta linha abaixo:
Procurei no fórum de dúvidas e encontrei algo comentado que este tipo de erro pode ser resultado de sobrecarga, quando tento verificar a mesma coisa várias vezes.
Consegui solucionar, adptando o trecho acima assim, primeiro recebendo a distancia do ponto de colisão e depois comparando a tag do objeto colidido.
MarcosSchultz Utilizei base do script que você montou para um jogo do estilo amnesia kk... Só q estou aplicando para um jogo em VR.
Segue o Script completo abaixo, tem muitos comentários pq não vou descartando alguns trechos e ainda estou implementando.
Valeu!
- Código:
if (teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Objeto" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Mover" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Andar"){
Procurei no fórum de dúvidas e encontrei algo comentado que este tipo de erro pode ser resultado de sobrecarga, quando tento verificar a mesma coisa várias vezes.
Consegui solucionar, adptando o trecho acima assim, primeiro recebendo a distancia do ponto de colisão e depois comparando a tag do objeto colidido.
- Código:
if(Physics.Raycast (transform.position, transform.forward, out PontoDeColisao, 50)){
if (PontoDeColisao.transform.tag == "Objeto") {
//Passando o identificador da textura
QualTextura = 1;
//Seta como verdadeiro a possibilidade de mover o objet
podeMovimentar = true;
}
MarcosSchultz Utilizei base do script que você montou para um jogo do estilo amnesia kk... Só q estou aplicando para um jogo em VR.
Segue o Script completo abaixo, tem muitos comentários pq não vou descartando alguns trechos e ainda estou implementando.
Valeu!
- Código:
using UnityEngine;
using System.Collections;
public class Mira : MonoBehaviour {
//Distancias de visualizaçao do objeto selecionado
public float DistanciaMinima = 2, DistanciaMaxima = 100;
//Velocidade de manipulaçao dos objetos
public float VelocidadeDeMovimento = 10, velocidadeDeRotacao = 20;
//Forca para aremesso do objeto
public float ForcaParaAtirar = 2;
//Texturas de indicaçao de objeto selecionado
public Texture MaoFechada, MaoAberta, Seta, Mover;
//Qual textura devo exibir
public int QualTextura;
//Variavel booleana para comparacao de seleçao dos objetos
private bool podeMovimentar, estaMovimentando;
//Variavel booleana publica para movimentar a camera
public static bool podeMoverCamera = true;
//Distancia entre o max e o minimo permitido
private float DistanciaAjustada;
//Variavel para receber a posicao dos 3 eixos
private Vector3 PontoFinalDoRaio, velocity = Vector3.zero;
//Variavel GameObject
public static GameObject referenciaTemporaria;
//Recebe as coordenadas da camera do Script da Movimentacao do personagem
private float sensX, sensY;
//Variavel para determinar Alvo a ser seguido
public static Transform Alvo;
//Variavel pública para a velocidade do movimento do jogador
public float vel;
//Variavel para determinar a posicao deste gameobject
public Transform PosicaoJogador;
//Metodo Start, verificado apenas ao iniciar o jogo
void Start (){
//Se o objeto entrar nesse raio eh possivel seleciona-lo
DistanciaAjustada = (DistanciaMinima + DistanciaMaxima) / 2;
//DistanciaAjustada = DistanciaMaxima;
//Retira a visibilidade do cursor
Cursor.visible = false;
//Setando referencia como zero
referenciaTemporaria = null;
//Passando o identificador da textura
QualTextura = 0;
//Definindo alvo inicial para andar como o sendo o jogador
Alvo = transform;
}
/*void Update(){
//Calculando a distancia do alvo para andar
distanciaInimigo();
}*/
// Update is called once per frame
void Update () {
//Variavel do tipo RayCast
RaycastHit PontoDeColisao;
//Recebe o calculo de previsao de colisao
//Physics.Raycast (transform.position, transform.forward, out PontoDeColisao, 50);
//Calcula posicao do alvo
//PontoFinalDoRaio = transform.position + transform.forward*DistanciaAjustada;
//Caso esteja na distancia estabelecida, permite movimentar o objeto
//float teste = Vector3.Distance (transform.position, PontoDeColisao.point);
//if (teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Objeto" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Mover" || teste <= DistanciaMaxima && PontoDeColisao.transform.tag == "Andar"){
//if (Physics.Raycast (transform.position, transform.forward, out PontoDeColisao, 50)){
if(Physics.Raycast (transform.position, transform.forward, out PontoDeColisao, 50)){
if (PontoDeColisao.transform.tag == "Objeto") {
//Passando o identificador da textura
QualTextura = 1;
//Seta como verdadeiro a possibilidade de mover o objet
podeMovimentar = true;
}
else if (PontoDeColisao.transform.tag == "Mover") {
//Passando o identificador da textura
QualTextura = 2;
//Seta como verdadeiro a possibilidade de mover o objet
podeMovimentar = true;
}
else if (PontoDeColisao.transform.tag == "Andar") {
//Passando o identificador da textura
QualTextura = 3;
//Seta como verdadeiro a possibilidade de mover o objet
podeMovimentar = true;
}
else {
//Passando o identificador da textura
QualTextura = 0;
//Seta como verdadeiro a possibilidade de mover o objet
podeMovimentar = true;
}
}
else {
podeMovimentar = false;
QualTextura = 0;
}
//Pressinando o botao esquerdo do mouse
//if(Input.GetMouseButtonDown(0) && podeMovimentar == true){
//Condicao para andar
if (Input.touchCount > 0 && podeMovimentar == true || Input.GetMouseButton (0) && podeMovimentar == true){
print (Input.touchCount);
if (PontoDeColisao.transform.tag == "Objeto") {
TrocarJogadorDeLugar.PossoTrocarLugar = true;
}
else if(PontoDeColisao.transform.tag == "Mover") {
DistanciaAjustada = Vector3.Distance (transform.position, PontoDeColisao.point);
PontoDeColisao.rigidbody.useGravity = false;
referenciaTemporaria = PontoDeColisao.transform.gameObject;
estaMovimentando = true;
}
else if(PontoDeColisao.transform.tag == "Andar") {
//Alvo = PontoDeColisao.collider.transform.GetComponent<OndeDevoIr> ().Coordenada;
//distanciaInimigo ();
//RepassarAlvo = PontoDeColisao.collider.transform.GetComponent<RepassarPosicaoObjeto> ().Alvo;
//PossoAndarAgora = true;
}
}
/*
if (Input.simulateMouseWithTouches && Input.GetMouseButton (0) && podeMovimentar == true){
if (PontoDeColisao.transform.tag == "Objeto") {
TrocarJogadorDeLugar.PossoTrocarLugar = true;
QualTextura = 1;
}
if(PontoDeColisao.transform.tag == "Mover") {
DistanciaAjustada = Vector3.Distance (transform.position, PontoDeColisao.point);
PontoDeColisao.rigidbody.useGravity = false;
referenciaTemporaria = PontoDeColisao.transform.gameObject;
estaMovimentando = true;
QualTextura = 2;
}
}*/
//Soltando o botão
else {
podeMoverCamera = true;
//Zerando a referencia temporaria
if (referenciaTemporaria != null) {
referenciaTemporaria.GetComponent<Rigidbody> ().useGravity = true;
referenciaTemporaria = null;
}
estaMovimentando = false;
}
//Limitando a distancia do objeto para nao ultrapassar a camera
if (DistanciaAjustada < DistanciaMinima) {
DistanciaAjustada = DistanciaMinima;
}
//Limitando a distancia do objeto para nao ir muito longe
if (DistanciaAjustada > DistanciaMaxima) {
DistanciaAjustada = DistanciaMaxima;
}
//Quando um objeto foi manipulado
if (referenciaTemporaria != null) {
referenciaTemporaria.GetComponent<Rigidbody> ().position = Vector3.SmoothDamp (referenciaTemporaria.transform.position, PontoFinalDoRaio, ref velocity, (100 / VelocidadeDeMovimento) * Time.deltaTime);
}
}
//Exibindo a textura de mao no centro da tela
void OnGUI (){
//Se estiver com o MODO VR habilitado
//Exibe uma textura quando pode mover um objeto
if (QualTextura == 1) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect (Screen.width / 4 - MaoAberta.width / 4, Screen.height / 2 - MaoAberta.height / 2, MaoAberta.width, MaoAberta.height), MaoAberta);
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect ((Screen.width / 4 + Screen.width / 2) - (MaoAberta.width / 4 + MaoAberta.width / 2), Screen.height / 2 - MaoAberta.height / 2, MaoAberta.width, MaoAberta.height), MaoAberta);
} else if (QualTextura == 2) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect (Screen.width / 4 - Mover.width / 4, Screen.height / 2 - Mover.height / 2, Mover.width, Mover.height), Mover);
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect ((Screen.width / 4 + Screen.width / 2) - (Mover.width / 4 + Mover.width / 2), Screen.height / 2 - Mover.height / 2, Mover.width, Mover.height), Mover);
} else if (QualTextura == 3) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect (Screen.width / 4 - Seta.width / 4, Screen.height / 2 - Seta.height / 2, Seta.width, Seta.height), Seta);
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect ((Screen.width / 4 + Screen.width / 2) - (Seta.width / 4 + Seta.width / 2), Screen.height / 2 - Seta.height / 2, Seta.width, Seta.height), Seta);
} else if (QualTextura == 0) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect (Screen.width / 4 - MaoFechada.width / 4, Screen.height / 2 - MaoFechada.height / 2, MaoFechada.width, MaoFechada.height), MaoFechada);
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture (new Rect ((Screen.width / 4 + Screen.width / 2) - (MaoFechada.width / 4 + MaoFechada.width / 2), Screen.height / 2 - MaoFechada.height / 2, MaoFechada.width, MaoFechada.height), MaoFechada);
}
//Exibe uma textura quando estiver manipulando um objeto
if (estaMovimentando == true) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture(new Rect(Screen.width/4-MaoFechada.width/4, Screen.height/2-MaoFechada.height/2, MaoFechada.width, MaoFechada.height), MaoFechada);
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture(new Rect((Screen.width/4+Screen.width/2)-(MaoFechada.width/4+MaoFechada.width/2), Screen.height/2-MaoFechada.height/2, MaoFechada.width, MaoFechada.height), MaoFechada);
}
//Se NÃO estiver com o MODO VR habilitado
/*
*
//Exibe uma textura quando pode mover um objeto
if (podeMovimentar == true && estaMovimentando == false) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture(new Rect(Screen.width/2-MaoAberta.width/2, Screen.height/2-MaoAberta.height/2, MaoAberta.width, MaoAberta.height), MaoAberta);
}
//Exibe uma textura quando estiver manipulando um objeto
if (estaMovimentando == true) {
//Cria uma GUI Texture de acordo com as posiçoes de altura e largura da imagem, alem de exibi-la na tela
GUI.DrawTexture(new Rect(Screen.width/2-MaoFechada.width/2, Screen.height/2-MaoFechada.height/2, MaoFechada.width, MaoFechada.height), MaoFechada);
}
*
*/
}
/*
void distanciaInimigo (){
float distanciaJogador = Vector3.Distance(transform.position, Alvo.position);
//Entra na condição se a distancia for menor que 10 e maior que 1
if(distanciaJogador < 10 && distanciaJogador > 1){
//Passa como parametro verdadeiro
ControlarInimigo(true);
}
else{
//Passa como parametro falso
ControlarInimigo(false);
}
}
//Método "ControlarInimigo" recebe parametro BOOL de entrada
void ControlarInimigo (bool verificacao){
if(verificacao){
//Vector3 armazena as propriedades de escala, rotação e posição
Vector3 Direcao = (Alvo.position - transform.position).normalized;
//Transform.position recebe direção * tempo padrão do dispositivo * 5, além de adicionar mais um no resultado (+=)
transform.position += Direcao * Time.deltaTime * 2;
vel = Time.deltaTime * 2;
print(vel);
//anima.SetFloat ("velocidade", vel);
//Quartenion recebe as propriedades de 9 parâmetros
//Quaternion newRotation = Quaternion.LookRotation(Direcao);
//transform.rotation = newRotation;
}
else{
vel = 0;
//anima.SetFloat ("velocidade", vel);
//anima.SetTrigger("parado");
return;
}
}
*/
}
#N31- Membro
- PONTOS : 3389
REPUTAÇÃO : 11
Idade : 30
Respeito as regras :
Tópicos semelhantes
» Unity 5: Object reference not set to an instance of an object
» Error NullReferenceException: Object reference not set to an instance of an object
» NullReferenceException Object reference not set to an instance of an object
» Null Reference Exception: Object reference not set to an instance of an object
» Object Pooling
» Error NullReferenceException: Object reference not set to an instance of an object
» NullReferenceException Object reference not set to an instance of an object
» Null Reference Exception: Object reference not set to an instance of an object
» Object Pooling
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos