Jump to content
Sign in to follow this  
Joscob

Cómo sumar resultados de dados/prefabs que están dentro de un "panel"

Recommended Posts

Hola a todos. Mucho he tardado en consultar pero ya no sé cómo seguir.

Estoy recreando una aplicación para lanzar dados (d6, d8, d12...), tipo Star Wars Al filo del Imperio (por si os da una idea de lo que quiero hacer) lo tengo todo prácticamente listo, pero la imposibilidad de continuar viene ahora.

Los dados que se lanzan son prefabs, que a su vez son botones. Al seleccionar los dados que forman la reserva para ser lanzados, van arrojando su resultado en consola, pero me veo incapaz de conseguir que los dados se sumen entre ellos, o que puedan volver a ser lanzarlos todos juntos con otro botón "roll dice".

La pregunta es: ¿cómo puedo sumar los resultados de los dados/botones/prefabs (independientemente de los que sean) cada vez que pulse el botón "roll"?

Cada gameobject que supone un dado/botón/prefab para ser lanzado, es también un botón, y quedan todos guardados dentro de un "panel" hasta que se limpia por el usuario. He intentado recuperar los resultado con FindObject, Tag, Children... sin resultado alguno.

No sé si la explicación se entiende, porque la verdad a mí me cuesta explicarlo.

Gracias de antemano y cualquier aporte, aunque sea cómo guía para seguir será bien recibida.

Un saludo.

El script de los dados/botones son realmente sencillos, os dejo el más básico.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class D6Ataque : MonoBehaviour
{
    int tirada; 
    public int arma = 0; 
    public int cuerpo = 0; 

    public void AtqueD6()
    {
        tirada = Random.Range(1, 7);
        if (tirada == 1 || tirada == 2)
        {
            arma = 0;
            cuerpo = 0;
        }
        if (tirada == 3)
        {
            arma = 1;
            cuerpo = 0;
        }
        if (tirada == 4)
        {
            arma = 1;
            cuerpo = 1;
        }
        if (tirada == 5)
        {
            arma = 0;
            cuerpo = 2;
        }

        if (tirada == 6)
        {
            arma = 0;
            cuerpo = 1;
        }
    }
}

 

Share this post


Link to post
Share on other sites

Creando una clase genérica "dado" y programas las características necesarias, luego en DadosController creas un arreglo de esa clase con la cantidad de dados que requieras y sus configuraciones.

[Serializable]
public class Dado
{
    [SerializeField]
    private int[] m_sidesId = new int[6] { 0, 1, 2, 3, 4, 5 };    
    [SerializeField]
    private Text m_text = null;
    
    public int LastResult { get; private set; }
    
    public int Throw()
    {        
        //Random Value
        LastResult = m_sidesId[Random.Range(0, m_sidesId.Length - 1)];
        //Update UI
        if (m_text is object)
            m_text.Text = LastResult.ToString();            
        return LastResult;
    }
}

public class DadosController : MonoBehaviour
{
    public Dado[] Dados;
    
    public void ThrowAll()
    {
        foreach (Dado dado in Dados)
            dado.Throw(); 
        CalculateResult();
    }
    
    public void Throw(int index)
    {
        Dados[index].Throw();        
        CalculateResult();
    }
    
    private void CalculateResult()
    {            
        //Sumas Aplicando la Logica según los ID del Resultado de cada Dado..         
    }
}

Desde un botón podes llamar a ThrowAll o desde cada dado a Throw indicando el índice correspondiente.

Share this post


Link to post
Share on other sites

Muchas gracias por la pronta respuesta.

Ahora veo que no tengo ni idea de scripting 😥 . Tengo que investigar cómo funciona get & set.

Imagino que he de crear una variable [array] sidesId por cada tipo de dado.

De nuevo, muchas gracias francoe1.

Os iré contando mis progresos. Saludos.

  • Like 1

Share this post


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

×
×
  • Create New...