Jump to content
UnitySpain
Danitorres473

Como manipular objetos que estan en un array?

Recommended Posts

Buenas gente,queria postear un poco de mi codigo a ver si alguien me puede ayudar,tengo problemas con los arrays,el tema es el siguiente,estoy tratando de hacer un juego tipo pong pero con muchas pelotas,meti las pelotas en un array y ahora quiero controlar la ia del enemigo en referencia al array de pelotas,aca estan mis codigos.

el primero es el spawneador de pelotas donde esta el array:

var ball:GameObject;
static var ballArray:GameObject[];
var timeToSpawn:int=10;
function Start(){
    ballArray= GameObject.FindGameObjectsWithTag("Ball");
}
function Update(){
    timeToSpawn-=Time.deltaTime;
    ballArray= new GameObject[10];
    
    for(var i:int;i<ballArray.Length;i++){
        if(timeToSpawn==0){
        var clone=Instantiate(ball,Vector3.zero,Quaternion.identity);
         timeToSpawn=500;
        
    }
ballArray[i]=clone;

}
}
function Awake () {
    
    
  
}

y aca esta el controlador de la ia enemiga:

#pragma strict
var speed:float =10;
var ball:GameObject;
//var ballCon=spawnBallController;
function Update () {
    
   
    if(spawnBallController.ballArray.transform.position.y>transform.position.y){
            transform.position = new Vector3(transform.position.x,transform.position.y+0.2,0);
            transform.position.y = Mathf.Clamp(transform.position.y,-3.4,3.92);
        }
    if(spawnBallController.ballArray.transform.position.y<transform.position.y){
            transform.position = new Vector3(transform.position.x,transform.position.y-0.2,0);
            transform.position.y = Mathf.Clamp(transform.position.y,-3.4,3.92);
        }
   
    
   
    
}

el error que me tira en unity es el siguiente:

en la linea:

    if(spawnBallController.ballArray.transform.position.y>transform.position.y){

 "transform" is not a member of unityengine.gameObject[];

si no me explique bien avisen y por favor si alguien me puede dar una mano se lo voy a agadecer

Edited by Danitorres473
me faltaron cosas

Share this post


Link to post
Share on other sites

Debes indicar a con cuál objeto del array quieres trabajar. spawnBallController.ballArray[numero].transform.position.y

También ten en cuenta que deberías meter la línea ballArray[i] = clone; dentro del bucle porque sino puede que no te agregue los clones al array.

Share this post


Link to post
Share on other sites

Debes indicar a con cuál objeto del array quieres trabajar. spawnBallController.ballArray[numero].transform.position.y

También ten en cuenta que deberías meter la línea ballArray[i] = clone; dentro del bucle porque sino puede que no te agregue los clones al array.

hola juanma,gracias por responder tan rapido,entiendo lo que me decis pero el tema es que quiero hacer referencia a todos los indices del array,lo que quiero decir es que el enemigo debe seguir el movimiento de todos los objetos que estan dentro del array

Share this post


Link to post
Share on other sites

pues no se que quedras conseguir pero partiendo de la base de que siempre tienes un array vacio y que solo trabajas con la primera posicion del array ... pues no me he molestado mucho mas en mirar el resto ^.^

Share this post


Link to post
Share on other sites

pues no se que quedras conseguir pero partiendo de la base de que siempre tienes un array vacio y que solo trabajas con la primera posicion del array ... pues no me he molestado mucho mas en mirar el resto ^.^

hola,gracias por responder,soy muy nuevo en unity y puedo cometer errores que para los mas experimentados pueden pareces tontos,podrias explicarme por que el array esta vacio por favor?

Share this post


Link to post
Share on other sites

hola,gracias por responder,soy muy nuevo en unity y puedo cometer errores que para los mas experimentados pueden pareces tontos,podrias explicarme por que el array esta vacio por favor?

Claro, si lo pides asi ... la linia ballArray = new GameObject [10]; dentro del Update es la "culpable" de que tu array siempre este vacio.

Share this post


Link to post
Share on other sites

Claro, si lo pides asi ... la linia ballArray = new GameObject [10]; dentro del Update es la "culpable" de que tu array siempre este vacio.

si gracias,lo pude cambiar ayer y asi quedo mi nuevo codigo de spawnBallController:

#pragma strict
static var ball:GameObject[];

var timeToSpawn:int=10;
function Start(){
   
}
function Update(){
    timeToSpawn-=Time.deltaTime;
    
    for(var i:int;i<ball.length;i++){
        if(timeToSpawn==0){
        Instantiate(ball[i],Vector3.zero,Quaternion.identity);
         timeToSpawn=500;
      
    }


}
}

en el array ball meti 5 objetos en el inspector,el enemyController quedo asi:

#pragma strict
var speed:float =10;
//var ball:GameObject;
//var ballCon=spawnBallController;

function Update () {
     
    for(var i:int;i<spawnBallController.ball.length;i++){
    if(spawnBallController.ball[i].transform.position.y>transform.position.y){
            transform.position = new Vector3(transform.position.x,transform.position.y+0.2,0);
            transform.position.y = Mathf.Clamp(transform.position.y,-3.4,3.92);
        }
if(spawnBallController.ball[i].transform.position.y<transform.position.y){
            transform.position = new Vector3(transform.position.x,transform.position.y-0.2,0);
            transform.position.y = Mathf.Clamp(transform.position.y,-3.4,3.92);
        }
   
    
   }
    
}

el tema es que ahora me saltan dos errores de referencia nula,ambos salen en las lineas que quiero recorrer el array,este es el error que me sale:

NullReferenceExecption:Object reference not set to an instance of an object

Share this post


Link to post
Share on other sites

eso es porque sigue estando vacio xD antes lo vaciabas, ahora directamente es que no metes nada ... en el mejor de los casos, aunque no saltara fallo, tendrias 1 posibilidad entre 500 (por poner un numero) de meter un objeto en el array; y si se diera esa casualidad increible, la segunda posicion del array y consecutivas siempre estarian vacias por lo que saltaran errores de NullReferenceException al intentar acceder a esas posiciones.

supongo que no te molestaria si el mejor consejo que te puedo dar es "aprende y practica bastante en programacion basica antes de meterte a Unity" porque tu error no llega ni a la categoria de error en programacion (no saber cosas como funciones o variables) ... es un error de logica que es aun peor.

Nunca habria ningun gameobject dentro del array ... ni 1 de cada 500 veces, ni 1 de cada 1.000.000.000

Edited by Arthure
Corrijo una afirmacion que hice

Share this post


Link to post
Share on other sites

eso es porque sigue estando vacio xD antes lo vaciabas, ahora directamente es que no metes nada ... en el mejor de los casos, aunque no saltara fallo, tendrias 1 posibilidad entre 500 (por poner un numero) de meter un objeto en el array; y si se diera esa casualidad increible, la segunda posicion del array y consecutivas siempre estarian vacias por lo que saltaran errores de NullReferenceException al intentar acceder a esas posiciones.

supongo que no te molestaria si el mejor consejo que te puedo dar es "aprende y practica bastante en programacion basica antes de meterte a Unity" porque tu error no llega ni a la categoria de error en programacion (no saber cosas como funciones o variables) ... es un error de logica que es aun peor.

Nunca habria ningun gameobject dentro del array ... ni 1 de cada 500 veces, ni 1 de cada 1.000.000.000

si reconozco que programacion no es mi fuerte,voy a seguir tu consejo y voy a buscar tutoriales sobre estos temas,gracias

Share this post


Link to post
Share on other sites

×
×
  • Create New...