Noticias

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

Armonía de las variables

Iniciado por juanma_teso, Julio 08, 2018, 02:32:58 AM

Tema anterior - Siguiente tema
Hola!! Quería saber si alguien ha leído alguna vez algo sobre la forma de crear una especie de armonía para las diferentes variables que tiene un mismo objeto, es decir que exista un equilibrio para que uno pueda ser mejor que otros en determinados terrenos o circunstancias, es una cuestión más de diseño que otra cosa, siempre se puede jugar al ensayo y error, pero me gustaría saber si hay algo por ahí para tomar una referencia.
 
Mi caso concreto; quiero tener diferentes naves (vehículos) y sus variables son pocas: manejo, velocidad de aceleración, velocidad máxima y suerte.
 
Hasta ahora se me ha ocurrido hacer que la suma de las cuatro variables sea constante, pero nada más.
 
Si tenéis alguna sugerencia también me vale!!

Debes tener un factor de multiplicación - En tu caso el nivel -
 

public class NaveStats
{
    public int Level { get; set; }
    private int _speed = 10;
    public int Speed { get { _speed * Level; } }
   
    private int _force = 10;
    public int Force { get { _force * Level; } }
   
    private int _damage = 10;
    public int Damage { get { _damage * Level; } }
}

 
O si no puedes plantearte la idea de hacer un estructura que contenga la estadísticas en cada nivel, tambien si la nave se vera afectada por algún items debería tenerlo en cuenta.
 

public class NaveStats
{
    public int Level { get; set; }
    public List<NaveItem> Items = new List<NaveItem>();
    private int _speed = 10;
    public int Speed { get { (_speed + Items.Sum(x => x.SpeedAdd)) * Level; } }
   
}
public class NaveItem
{
    public int SpeedAdd;
}

 
 

Gracias por responder @francoe1! No vas mal encaminado con lo que tengo pero yo me refiero a algo más específico de diseño, es decir, tengo un ScriptableObject con esas 4 variables además de otros aspectos gráficos, como el modelo de la nave y un par de imágenes; esto se lo paso al objeto nave(vehículo) y asigno las variables, pero lo que quiero es crear varias diferentes para hacer diferentes vehículos, mi juego es casi como un mario kart (sin el casi), por terrenos y circunstancias me refiero a las diferentes pistas que tendré que diseñar también, unas con más rectas donde la velocidad premie, otras con más obstáculos que te frenen más a menudo y sea clave la aceleración, muchas curvas para el manejo e incluso había pensado en unas con tantos speedup como para que sea determinante la suerte, por eso ponía como ejemplo el hecho que la suma sea igual para que si quito de uno, se aumente de otro, pero quizá haya otras maneras de equiparar, debe haber otra forma de definir esto, porque tal vez sea más determinante una u otra, y esto es lo que me gustaría saber, no que me lo digáis vosotros  sino si tengo una manera de figurarlo.

Creo que lo que buscas son patrones o fórmulas de "BALANCEO" durante la progresión y el diseño del juego. Yo no me he puesto a buscar mucho sobre el tema todavía, pero puede que existan libros o guías sobre cómo equilibrar datos correctamente. 

Es exactamente lo que busco! Puedo hacerlo más adelante pero me gustaría partir de unos valores concretos para diseñar también las pistas.

Bueno, con buscando en Google "balancear juego" o "balancear juego diseño" he encontrado algunos foros y blogs, pero hablan de juegos concretos, si encuentro algún recurso que me sea útil lo dejaré por aquí, supongo que tocará hacer ensayo-error más adelante.

para el jueguito casual de zombis q estoy haciendo necesitaba balancear los vehiculos para q sus caracteristicas (radio de ataque, velocidad, potencia de fuego, capacidad de combustible, etc) representaran bien su costo en monedas del juego... busque mucho sobre game design en este aspecto, y la verdad no encontre NADA...
 
pero dandole vueltas al asunto termine entiendiendo q lo mejor es usar una hoja de calculo para resolver los factores de capacidad de las caracteristicas relacionadas... por ejemplo, resolvía el tiempo en accion del vehiculo con la capacidad del tanque de combustible y el consumo de combustible por segundo...
 
luego combine esos factores con otros para obtener un factor de rendimiento general... asi pude ajustar las caracteristicas de los vehiculos manualmente hasta que quedaran ordenados de una manera que tuviera sentido, y les puse costos q tuvieran una relacion de un vehiculo a otro segun su rendimiento.
 
espero te sirva esa idea!

Muchas gracias @Braltor!! Pues me sirve para saber que me las tendré que arreglar por mi cuenta
 
Supongo que haré cálculos para saber cuándo empieza a ser determinante una u otra variable, de todas formas si concreto algo decente y viendo que no hay mucha información (o no la hemos encontrado) por la red lo postearé porque me parece un buen tema de debate.

Julio 08, 2018, 11:53:27 PM #8 Ultima modificación: Julio 08, 2018, 11:54:33 PM por lightbug
Mmm podrías definir el "puntaje" como planteas, un promedio aritmético entre las distintas habilidades que tengas para mantener el balance, es una forma, y de aquí imponer que todos tengan el mismo puntaje en determinado momento, por ej al iniciar.
 
El pasar de nivel puede resultar en aumentar el puntaje, EJ:
 


  •    Puntaje = 4 .... fuerza = 1 , vel = 7 , armadura = 4    ---->LEVEL UP ---->      Puntaje = 5 .... fuerza = 2 , vel = 8, armadura = 5        


O elegir directamente la habilidad (muy usada en rpgs también)
 


  •    Puntaje = 4 .... fuerza = 1 , vel = 7 , armadura = 4    ---->LEVEL UP ---->      Puntaje = 4.3333 .... fuerza = 2 , vel = 7, armadura = 4        


Para hacer las cosas más divertidas podés meter algo de aleatoriedad al asunto.
 
Una opción es definir los elementos báse (las habilidades) con su modificador (por escenario, bonus, random, etc), util para distintas situaciones. Por ej tenés una nave rapidisima vs una bien fuerte, pero resulta que están metidas en un medio muy denso, la rápida junto con la falta de fuerza (por este promedio dicho arriba, si es muy rápida bajará el resto) sufre un costo de velocidad de X% por la densidad del albiente, es decir su punto fuerte se ve comprometido para este escenario específico, cuando para la nave fuerte este porcentaje no la afecta, entonces si vas a plantear cosas así las podés agregar al calculo final estos modificadores para hacer las stats algo dinámicas.
 
incluso podrías proponer una "función de mejora", que dependiendo del nivel se modifiquen individualmente lo que quieras con el factor que quieras ;)
 
Cita de: juanma_teso date=1531072580Bueno, con buscando en Google "balancear juego" o "balancear juego diseño" he encontrado algunos foros y blogs, pero hablan de juegos concretos, si encuentro algún recurso que me sea útil lo dejaré por aquí, supongo que tocará hacer ensayo-error más adelante.
   


No creo que exista una forma "correcta" de hacerlo, o una forma documentada de hacerlo, es matemática, es un juego de números más que del estilo de juego, y sí, el prueba y error seguro se va a dar, siempre se da,
 
saludos
 
 

Lo que pasa que va en base al GamePlay pero podrias como dice @lightbug definir qué campos son directamente proporcionales - Por ejemplo si la fuerza de inicio es de 5 la defensa es de 6 a cuanto más aumenta la fuerza más disminuye la defensa - Pero siempre deberias de tener un puntaje total de todos los parámetros, y por cada aumento tienes que controlar el puntaje total, y si modificas el puntaje total creas la ecuación inversa para que se aplique a todos los parámetros equitativamente -. teniendo en cuenta las directivas proporcionales que antes mencione-.
 
Un desastre mi explicación, pero me enfrente múltiples veces en esto con algunos softwares contables donde muchas ecuaciones van en base a promedios y relaciones -
 
Si quieres sube una tabla de prueba - y aplicamos un algoritmo 
 
Aca dejo el mio -
 
https://dotnetfiddle.net/lCQIST

Muchas gracias por las ideas, pero no es necesario complicarse tanto, como ya dije solo tengo cuatro parámetros y no tengo intención de cambiar mucho porque mi idea no es crear una simulación sino algo que sea más ficticio (por esto no uso las físicas de Unity) al estilo MarioKart
 
Bien, os dejo cómo tengo relacionado las variables para mover la nave (vehículo, es más como un coche pero con forma de ovni) para ver si se os ocurre cómo balancearlas, para mí es importante hacerlo bien (tampoco perfecto porque no creo que sea posible) para que la skill del jugador se note.
 

//Estos condicionales cambian el Vector2 direccion de la nave, esta dirección es la dirección en la que se moverá este frame, influye la
//aceleración y el manejo.
if (moviles.acelerando)
moviles.direccion = Vector2.MoveTowards(moviles.direccion, moviles.delante * moviles.velocidadAceleracion + moviles.delante * moviles.direccion.magnitude,moviles.manejo * Time.deltaTime);
else if (moviles.frenando)
    moviles.direccion -= moviles.direccion * (moviles.velocidadAceleracion / 2f) * Time.deltaTime;
else
    moviles.direccion = Vector2.MoveTowards(moviles.direccion, Vector2.zero, 5f * Time.deltaTime);
//Aquí limito el vector a la velocidad máxima.
moviles.direccion = Vector2.ClampMagnitude(moviles.direccion, moviles.velocidadMaxima);
//Aquí giro la nave y depende del manejo, la variable dir varía de -10 a 10 (Input).
moviles.rotacion += (float)(moviles.dir) * moviles.manejo * Time.deltaTime;
moviles.ActualizarT(moviles.posicion + moviles.direccion * Time.deltaTime, moviles.rotacion);

 
Como véis el bloque de código es bien corto y todos las variables influyen de manera lineal menos el manejo, que influye en cómo de rápido gira la nave y lo rápido que cambia de dirección, aquí no interviene para nada la suerte, pero sí que interviene con los valores que pueda tener el coche, a mejor coche, menos suerte.
 
Viéndolo aquí me recuerda al álgebra y a sus "fantásticos" sistemas de ecuaciones... en fin, matemáticas

Etiquetas: