Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Poner y quitar balas recamara

Iniciado por marceloLaw, Febrero 06, 2018, 04:30:18 PM

Tema anterior - Siguiente tema
Buenas ha todos, estoy intentando mostrar y ocultar las balas de una recamara.

1º Como puedo tener diferentes recamaras, creo una lista de GameObjects con el tag balas

2º Cuando colisiono con las esquinas voy perdiendo balas de la recamara de forma aleatoria.

3º El problema lo tengo al entrar en el trigger de un powerup "Recargador", no consigo que vuelvan a aparecer las balas que había perdido. El trigger funciona ya que el powerup se destruye.
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class recarga : MonoBehaviour {
public List <GameObject> balas;
 
void OnCollisionEnter2D(Collision2D coll) {
   if (coll.gameObject.tag == "02esquinas") {
      
      Debug.Log ("GOLPE");
      ComprBala ();
      int i = Random.Range(0, balas.Count);
      balas [i].SetActive (false);
      ComprBala ();
   
      }
}
void OnTriggerEnter2D(Collider2D powerCol){
   if (powerCol.gameObject.tag == "Cargador") {
         balas [1].SetActive (true);
               
      Destroy (powerCol.gameObject);
      }
      }
void Awake () {
   ComprBala ();
}
void ComprBala (){
   balas = new List <GameObject> ();
   foreach (GameObject bala in GameObject.FindGameObjectsWithTag ("01balas"))
   {
      balas.Add(bala);
   }
}
}

 
 

Por qué solamente hacés un setActive? eso se traduce en recuperar las balas perdidas? no será el balas[1] el problema?
 
 

Cita de: lightbug date=1517932539Por qué solamente hacés un setActive? eso se traduce en recuperar las balas perdidas? no será el balas[1] el problema?
   
   
       
   


Simplemente he dejado uno de muestra, por que he probado poniendo tantas como balas tenia la recamara. He intentado recorrerlas con un for y un if para si la bala
  • no estuviera activa activarla, pero en ningún caso veo que realice nada

Cita de: marceloLaw date=1517933912Simplemente he dejado uno de muestra, por que he probado poniendo tantas como balas tenia la recamara. He intentado recorrerlas con un for y un if para si la bala
  • no estuviera activa activarla, pero en ningún caso veo que realice nada


Ok, a lo que voy es que, con solo activar el gameObject te debería recargar las balas? o quizás lo tenés planteado así, no se, pero lo ideal me parece es no trabajar de entrada con gameObjects, simplemente tené un int, y anda quitando/incrementando el valor dependiendo de con que colisiones, si eso te anda, el resto es gráficos y funcionalidades.
 
 

Cita de: lightbug date=1517934655Ok, a lo que voy es que, con solo activar el gameObject te debería recargar las balas? o quizás lo tenés planteado así, no se, pero lo ideal me parece es no trabajar de entrada con gameObjects, simplemente tené un int, y anda quitando/incrementando el valor dependiendo de con que colisiones, si eso te anda, el resto es gráficos y funcionalidades.
   
   
       
   


cada bala es un gameObject, la idea que tengo es que si pasas por un cargador te aparezcan todas las balas que has perdido, y si pasas por una bala, solo se añada una de la que has perdido. Todas las balas son hijos de un gameObject, no se si hay alguna otra forma de mostrar y ocultar cada bala.

No se que quieres hacer realmente, pero lo ideal es trabajar con numeros y no con GameObjects como por ejemplo te ha comentado @lightbug. Para lo que tendrias que crear un objeto simple que se actualize en cada colision o en cada recarga.
 
Por ejemplo:
 

class Cargador{

public int maxBalas = 12; // esto le indicaria que el tamaño del cargador es de 12 balas
public GameObject balaMdl; // con esto tienes la instancia del GameObject y no necesitas 40 objetos en la escena
private int balas = 0;
void Choque(){
   balas -= Random.range(0, balas);
}
void Recargar(){
   balas = maxBalas;
}

}

 
 

Cita de: marceloLaw date=1517935803Todas las balas son hijos de un gameObject, no se si hay alguna otra forma de mostrar y ocultar cada bala.
   


Ah quizás acá este el "error", si vos activas/desactivás un hijo, el activeSelf del hijo queda en true/false, ahora, activar al padre no implica activar al hijo (si desactivás al padre el hijo se desactiva, pero no el activeSelf si anteriormente estaba activado... es medio un trabalenguas), quizás esto es lo que estás te esta pasando, por eso tus balas no aparecen? te fijaste si en el hierarchy view se activa o no. Igual te digo como arriba y como te dice el amigo @Chaskarron, llevá la cuenta de las balas que tenés como primer paso, si las perdés por ahí instancia o activá un objeto que la represente (si es lo que querés)
 
saludos
 
 

voy a darle una vuelta y quitar los gameobjets, por que al desactivarlos si que se veía que estaban con el gris tenue pero al activarlos nunca cambiaban de color. Muchas gracias

Etiquetas: