Jump to content
Sign in to follow this  
nomoregames

ANSWERED Doble instancia y muerte

Recommended Posts

Buenas tardes

No sabría explicar por que ocurre lo siguiente, así que intentare explicar mi situación de la forma mas compresible posible 

Estoy haciendo arboles que, al ser golpeados se caen, pero con efecto pixel...

Tengo un árbol formado por un conjunto de cubos, los cubos visibles están anidados dentro de un cubo puesto exactamente en la misma posición, solo que estos son objetos vacíos

 

Captura.PNG Los cubos padres son invisibles

Cada uno de estos cubos visibles, tiene en su interior el siguiente script

GameObject Padre;

    void Start()
    {
     
        Padre = gameObject.transform.parent.gameObject;  
    }

  
    void Update()
    {

        var vec = transform.eulerAngles;
        vec.x = Mathf.Round(vec.x / 90) * 90;
        vec.y = Mathf.Round(vec.y / 90) * 90;
        vec.z = Mathf.Round(vec.z / 90) * 90;
        transform.eulerAngles = vec;
       

transform.position = new Vector3(Mathf.RoundToInt (Padre.transform.position.x), Mathf.RoundToInt(Padre.transform.position.y), Mathf.RoundToInt(Padre.transform.position.z));

   

    }

Que básicamente lo que hace es tomar como referencia a su padre para redondear la posición de este  y lograr el efecto pixelado

Bien...

Para controlar el estado de el árbol, su vida y como caer tengo el siguiente script anidado en el objeto Tronco que aparece en la imagen de las jerarquías 

 static float TreeLive = 5;
   GameObject TreeMoveController;
  static private bool FinalizarComprobaciones = false;


    private void Start()
    {
        TreeLive = 5;
        
        TreeMoveController = gameObject.transform.parent.transform.parent.gameObject;
  
    }
    public void ReciveDamage(float Damage)
    {
        TreeLive -= Damage;

    }
    private void Update()
    {
       
      
        if (TreeLive <= 0 && FinalizarComprobaciones == false)
        {
           
                TreeMoveController.transform.rotation = Quaternion.RotateTowards(TreeMoveController.transform.rotation, 
                        new Quaternion(0.67f, 0.4f, -0.4f, 0.67f), 0.4f);

                if (TreeMoveController.transform.rotation == new Quaternion(0.4f, 0.5f, -0.5f, 0.4f))
                {
                   
                    FinalizarComprobaciones = true;

            }

        }
      
    }

Cuando la vida es 0 o menos el árbol cae.

El problema viene cuando instancio mas de uno en la escena, pues en el momento que le resto la vida a uno de ellos hasta el 0 y este cae, todos los otros arboles caen

 

Algo similar me ocurre con unos enemigos, cuando los duplico y la vida de uno de ellos es 0, los dos mueren...

Puede tener algo que ver la forma en la que les resto la vida? 

  RaycastHit hit;
            if (Physics.Raycast(transform.position, transform.forward, out hit, 1f))
            {

                hit.transform.gameObject.SendMessage("ReciveDamage", SwordDamage);

            }

 

 

 

 

Si he añadido tanta info a el post es por que no he logrado encontrar por donde esta el error... 

 

Gracias por la paciencia 

Share this post


Link to post
Share on other sites

El problema es simple. 

Un campo o propiedad estático no se instancia, por lo cual estas utilizando el campo TreeLive para todas las instancias. 

Share this post


Link to post
Share on other sites

Como no se me había ocurrido 😱

Pero.... entonces, como puedo hacer que esa variable (vidas) no combine al pasar de una escena a otra?

Share this post


Link to post
Share on other sites

En este caso la solución puede ser más complicada de explicar, escribiré un blog con la explicación.

 

Share this post


Link to post
Share on other sites

Muchas gracias! estaré al tanto

Pero... no se podría hacer algo así como un script externo, en el que se fueran guardando todas las vidas, y hacer que este si que fuera static... pregunto por que nunca he hecho algo así 

Edited by nomoregames

Share this post


Link to post
Share on other sites

En este tipo de casos, como en tantos otros se suele implementar algo que se conoce como "state management pattern" (Gestión de patrón de estado).

Explicarte todo sería bastante complicado y extenso, por eso deberias esperar a que escriba el blog, seguramente esta noche o mañana por la mañana (hora ARG) lo tenga publicado. 

Share this post


Link to post
Share on other sites
On 5/14/2020 at 2:46 PM, nomoregames said:

new Quaternion(0.67f, 0.4f, -0.4f, 0.67f), 0.4f);

Guat!!

2x2jm9.jpg

  • Like 3

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...