Jump to content
UnitySpain
oridar

array de gameobjects variable

Recommended Posts

buenas,

estoy intentando crear un  array con 5 gameobjects dentro que luego utilizo para instancias 1 atreves  de un random, algo así:

Cita

 

public GameObject[] cubos = new GameObject[5];  // así los creo.

GameObject cubo = (GameObject)Instantiate (cubos [Random.Range (0, cubos.length)]); // así los instancio aleatoriamente

 

vale, ahora necesito que esta lista de gameobjects, pueda cambiar sin afectar al aleatorio, me refiero a que por ejemplo tener una variable tipo boleado que active o desactive uno de los objetos y se quite de la lista o vuelva.

 

gracias.

voy un poco perdido, agradecería cualquier guía.

Edited by pioj
uso de tags y <> para pegar código.

Share this post


Link to post
Share on other sites

No sé qué quieres hacer exactamente, pero las instancias no las tienes en ninguna lista. Si quieres puedes tener dos arrays, una con los cubos que tienes y otra con booleanos, y una lista o array en la que tengas los que sí puedes instanciar, luego tendrías que cambiar los booleanos según tu criterio y volver a hacer la segunda lista o array con los true, si no es lo que buscas explica un poco más.

Share this post


Link to post
Share on other sites

No sé qué quieres hacer exactamente, pero las instancias no las tienes en ninguna lista. Si quieres puedes tener dos arrays, una con los cubos que tienes y otra con booleanos, y una lista o array en la que tengas los que sí puedes instanciar, luego tendrías que cambiar los booleanos según tu criterio y volver a hacer la segunda lista o array con los true, si no es lo que buscas explica un poco más.

buenas, 

me podrias esplicar un poco eso de las dos listas, con algún ejemplo?

yo lo que quiero hacer es una array vacía que pueda meter i sacar gameobjects o vaciar la lista.

pero que no me pida posición de array  simplemente vaya metiendo objetos en el siguiente espacio libre  

 

gracias

me puedes    

Share this post


Link to post
Share on other sites

Entonces necesitas una lista, que es parecido al array pero dinámico, se puede añadir y quitar objetos al gusto, las listas suelen tener un tipo, GameObject o Transform o otro tipo.

public GameObject[] cubos = new GameObject[5];
List<GameObject> listaCubos = new List<GameObject>();
GameObject nuevo;
void Start()
{
    //Instancias un nuevo objeto
    nuevo = Instantiate(cubos[random...]...);
    //Lo añades a la lista sin importar cuantos haya
    listaCubos.Add (nuevo);
    //Modificar elemento enésimo de la lista
    listaCubos [n].setActive (false);
    //Elementos de la lista
    Debug.Log(listaCubo.Count);
    //Elimina el elemento enésimo de la lista
    listaCubos.Remove (n);
    Debug.Log(listaCubo.Count);//Un número menos que antes.
}

Sigo sin saber qué intentas lograr, espero que te sirva.

PD: te vuelvo a dejar el link para que lo mires.

https://msdn.microsoft.com/es-es/library/6sh2ey19(v=vs.110).aspx

Share this post


Link to post
Share on other sites

Entonces necesitas una lista, que es parecido al array pero dinámico, se puede añadir y quitar objetos al gusto, las listas suelen tener un tipo, GameObject o Transform o otro tipo.

public GameObject[] cubos = new GameObject[5];
List<GameObject> listaCubos = new List<GameObject>();
GameObject nuevo;
void Start()
{
    //Instancias un nuevo objeto
    nuevo = Instantiate(cubos[random...]...);
    //Lo añades a la lista sin importar cuantos haya
    listaCubos.Add (nuevo);
    //Modificar elemento enésimo de la lista
    listaCubos [n].setActive (false);
    //Elementos de la lista
    Debug.Log(listaCubo.Count);
    //Elimina el elemento enésimo de la lista
    listaCubos.Remove (n);
    Debug.Log(listaCubo.Count);//Un número menos que antes.
}

Sigo sin saber qué intentas lograr, espero que te sirva.

PD: te vuelvo a dejar el link para que lo mires.

https://msdn.microsoft.com/es-es/library/6sh2ey19(v=vs.110).aspx

gracias. he estado mirándolo pero no me sale,

siento no haberme expresado bien.  Por si acaso lo repetiré intentando explicarlo mejor

Tengo 6 gameobjects creados:

  • public gameobject cuboRojo;
  • public gameobject cuboAmarillo;
  • etc... Hasta 6. 

quiero hacer un arraylist que pueda ir poniendo y quitando los game objects ja creados arriba.

  • public ArrayList listaCubos = new ArrayList();

luego añado los gameobjects:

  • listaCubos.Add (cuboRojo);
  • listaCubos.Add(cuboAmarillo);

y por ultimo  instanciando aleatoriamente dependiendo de los que hay dentro del array .

  • cubo = Instantiate(listaCubos[random.range(0, listaCubosLength)]);

pero no me funciona, me da un error de The tape object cannot be used as tope parapete T etc..

creo que tu explicación va por ahí, pero no me sale bien

Muchas gracias

Edited by oridar

Share this post


Link to post
Share on other sites

Entonces necesitas una lista, que es parecido al array pero dinámico, se puede añadir y quitar objetos al gusto, las listas suelen tener un tipo, GameObject o Transform o otro tipo.

public GameObject[] cubos = new GameObject[5];
List<GameObject> listaCubos = new List<GameObject>();
GameObject nuevo;
void Start()
{
    //Instancias un nuevo objeto
    nuevo = Instantiate(cubos[random...]...);
    //Lo añades a la lista sin importar cuantos haya
    listaCubos.Add (nuevo);
    //Modificar elemento enésimo de la lista
    listaCubos [n].setActive (false);
    //Elementos de la lista
    Debug.Log(listaCubo.Count);
    //Elimina el elemento enésimo de la lista
    listaCubos.Remove (n);
    Debug.Log(listaCubo.Count);//Un número menos que antes.
}

Sigo sin saber qué intentas lograr, espero que te sirva.

PD: te vuelvo a dejar el link para que lo mires.

https://msdn.microsoft.com/es-es/library/6sh2ey19(v=vs.110).aspx

he reeditado mi respuesta 

Share this post


Link to post
Share on other sites

El ArrayList se utlizaba hace un tiempo. Utiliza mejor la List como te comentan. Otro tema es que no sepas los que es <T> y lo del error "tope parapete". Entonces ya, necesitas saber teoría sobre C# templates.

Share this post


Link to post
Share on other sites

El ArrayList se utlizaba hace un tiempo. Utiliza mejor la List como te comentan. Otro tema es que no sepas los que es <T> y lo del error "tope parapete". Entonces ya, necesitas saber teoría sobre C# templates.

gracias, pero si supiera como funciona todo lo de c# ya  no estaría haciendo la pregunta, no me ayudas mucho,

y ya estoy intentando hacer el list pero me peta. 

gracias de todos modos experto.

Share this post


Link to post
Share on other sites

El problema es que preguntas algo sin tener prácticamente base teórica, y entonces todo lo que te responden no lo entiendes. No saber lo que es un List o <T> es tan básico como sumar.

Deberías rebobinar y empezar por entender las bases de programación con C# sino te pararás a cada paso.

Share this post


Link to post
Share on other sites

yo paso ya de decirle a la gente que aprenda primero programacion, siempre saltan con la misma respuesta : "vas de pro", "no me interesa aprender, solo saber lo que pregunto", "no me ayudas", "para eso mejor no haber dicho nada" ... y un largo etc. Cuando se es tan ignorante (no es una ofensa, solo una observacion) para saber que les estas dando el mejor consejo posible.

gracias, pero si supiera como funciona todo lo de c# ya  no estaría haciendo la pregunta, no me ayudas mucho,

y ya estoy intentando hacer el list pero me peta. 

gracias de todos modos experto.

No se trata de saber todo lo de c#, pero precisamente lo que no sabes hacer en este caso es tan basico ... que lo mejor que puedes hacer es aprender programacion primero, y si no quieres aprender por lo menos no ofenderse cuando te digan. Cosas como clases genericas es de lo mas tirado y se utiliza un monton de una forma u otra.

Share this post


Link to post
Share on other sites

Aunque coincido en que es mejor aprender a programar antes, si sabes un poco es cuestión de ir ampliando, un tipo de dato es int, string, float... GameObject, Transform, miClase... no sé darte una definición porque el nombre es la definición en sí. Para crear una lista, que tiene varias ventajas sobre el arraylist es necesario especificar un tipo entre <Tipo>, en tu caso GameObject, como te lo puse en el ejemplo, si intentas agregar 'lista.Add()' otro tipo de dato como Transform, int, string, etc... te dará error. Por último comentar que para poder usar listas, debes usar el namespace 'System.Collection.Generic', esto es un contenedor de clases, normalmente se importan dos por defecto, 'System.Collection' y el otro de Unity que ahora no recuerdo.

Share this post


Link to post
Share on other sites

Aunque coincido en que es mejor aprender a programar antes, si sabes un poco es cuestión de ir ampliando, un tipo de dato es int, string, float... GameObject, Transform, miClase... no sé darte una definición porque el nombre es la definición en sí. Para crear una lista, que tiene varias ventajas sobre el arraylist es necesario especificar un tipo entre <Tipo>, en tu caso GameObject, como te lo puse en el ejemplo, si intentas agregar 'lista.Add()' otro tipo de dato como Transform, int, string, etc... te dará error. Por último comentar que para poder usar listas, debes usar el namespace 'System.Collection.Generic', esto es un contenedor de clases, normalmente se importan dos por defecto, 'System.Collection' y el otro de Unity que ahora no recuerdo.

gracias juanma, ya especifico en la lista el tipo y tengo el system.collection.generic asignado. pero me da error igual.

estoy buscando en todas las guias tanto de unity como microsoft referencias pero no encuentro el porque del error.

vengo de programar en x-code, estoy aprendiendo ahora c#, si que me interesa aprender aunque por arriba digan que la gente tira aquí el código y espera respuesta, antes de subir el post estuve buscando, pero la verdad que las referencias tanto de unity como de microsoft son muy escuetas.

gracias por tu ayuda, seguiré investigando, cualquier cosa lo comento por aquí.

Share this post


Link to post
Share on other sites

Entiendo que sabes entonces, pon el código y lo que quieres conseguir explícitamente, no tengas reparo en mostrar el código que no he visto al primero del foro que copie una idea :lol:

Share this post


Link to post
Share on other sites

×
×
  • Create New...