none
C# - Deteção de blocos RRS feed

  • Pergunta

  • Olá!I

    Eu estout tentando construir um script em que um veículo detecta um cubo a sua frente, mas aparece o erro: 'NullReferenceError: Object reference not set to an instance of an object'. Alguém pode ajudar?

    using UnityEngine;
    using System.Collections;
    using System.Linq;
    using System;
    
    public class CubesDetectorScript : MonoBehaviour
    {
    
    public float angle;
    
    public float output;
    public int numObjects;
    public float menor_num;
    public float[] distances;
    public int index;
    public Cubes cb;
    public GameObject near;
    
    void Start()
    {
        menor_num = 0;
        index = 0;
        output = 0;
        numObjects = 0;
    
    
    }
    
    void Update()
    {
        GameObject cubes = GetAllCubes();
    
        output = 0;
        numObjects = 1;
    
    
            float r = 1;
            output += 1f / Mathf.Pow((transform.position - cubes.transform.position).magnitude / r + 1, 2);
    
    
        if (numObjects > 0)
            output = output / numObjects;
    }
    
    // Get Sensor output value
    public float getLinearOutput()
    {
    
        return output;
    }
    
    
    
    
    GameObject GetAllCubes()
    {
        //This is the line with the error:
        menor_num = Vector3.Distance(transform.position, cb.allCubes[0].transform.position);
    
        for (int j = 0; j < 10; j++)
        {
            distances[j] = Vector3.Distance(transform.position, cb.allCubes[j].transform.position);
    
            if (menor_num > distances[j])
            {
                index = j;
                menor_num = distances[j];
    
            }
        }
    
      near= GameObject.Find("Cube " + index);
    
        return near;
    
    }
    
    GameObject[] GetVisibleCubes()
    {
        ArrayList visibleCubes = new ArrayList();
        float halfAngle = angle / 2.0f;
    
        GameObject cubes = GetAllCubes();
    
    
            Vector3 toVector = (cubes.transform.position - transform.position);
            Vector3 forward = transform.forward;
            toVector.y = 0;
            forward.y = 0;
            float angleToTarget = Vector3.Angle(forward, toVector);
    
            if (angleToTarget <= halfAngle)
            {
                visibleCubes.Add(cubes);
            }
    
    
        return (GameObject[])visibleCubes.ToArray(typeof(GameObject));
    }


    sexta-feira, 4 de março de 2016 23:06

Respostas

  • Você poderia informar a linha do erro, ou sinalizar o trecho que está causando o problema?

    Você declara public Cubes cb; e depois tenta utilizar o cb, mas na classe não seta valor algum para o cb, talvez seja este o problema caso ele não seja setado fora da classe.

    Pode ser o near = GameObject.Find("Cube " + index); que retorna NULL, ai o próprio cubes seria NULL

    Pode ser o o transform do cubes que está null, ai dá o erro ao tentar acessar position.
    cubes.transform.position

    Enfim, pode ser muita coisa, então se passar a linha ou o trecho do código com o problema já vai ajudar.

    • Marcado como Resposta Marcos SJ terça-feira, 8 de março de 2016 21:07
    domingo, 6 de março de 2016 20:10