{"id":62,"date":"2026-02-28T00:11:00","date_gmt":"2026-02-27T23:11:00","guid":{"rendered":"https:\/\/www.noocturnalgamesstudio.com\/blog\/2026\/02\/28\/mas-alla-de-public-float-health-como-construir-un-sistema-de-estadisticas-rpg-modular-y-reactivo-en-unity\/"},"modified":"2026-02-28T00:11:00","modified_gmt":"2026-02-27T23:11:00","slug":"mas-alla-de-public-float-health-como-construir-un-sistema-de-estadisticas-rpg-modular-y-reactivo-en-unity","status":"publish","type":"post","link":"https:\/\/www.noocturnalgamesstudio.com\/blog\/2026\/02\/28\/mas-alla-de-public-float-health-como-construir-un-sistema-de-estadisticas-rpg-modular-y-reactivo-en-unity\/","title":{"rendered":"M\u00e1s all\u00e1 de &#8216;public float health&#8217;: C\u00f3mo construir un sistema de estad\u00edsticas RPG modular y reactivo en Unity"},"content":{"rendered":"<div style='font-family: system-ui, -apple-system, sans-serif; line-height: 1.8; color: #e2e8f0; font-size: 16px;'>\n<p style='margin-bottom: 15px;'>Todo desarrollador indie de RPG ha pasado por lo mismo: empiezas con un script de jugador sencillo, a\u00f1ades un <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>public float health<\/code>, luego <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>mana<\/code>, <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>stamina<\/code>, <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>strength<\/code>&#8230; y antes de que te des cuenta, tienes un monolito de 2000 l\u00edneas imposible de mantener.<\/p>\n<p style='margin-bottom: 15px;'>El problema no es solo el desorden; es la falta de reactividad. \u00bfC\u00f3mo sabe tu barra de UI que debe actualizarse sin hacer un chequeo costoso en cada <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>Update()<\/code>? \u00bfC\u00f3mo aplicas un buff de fuerza que expire autom\u00e1ticamente sin romper el valor base? Hoy vamos a ver c\u00f3mo el asset <strong style='color: #39FF14;'>Modular Attributes &#038; Stats (MAS)<\/strong> resuelve esto con arquitectura profesional.<\/p>\n<h3 style='color: #39FF14; margin-top: 30px; font-weight: 700; letter-spacing: 0.5px;'>1. La anatom\u00eda de un Atributo Profesional<\/h3>\n<p style='margin-bottom: 15px;'>En MAS, una estad\u00edstica no es solo un n\u00famero. Es una estructura de datos inteligente. Para construir un sistema escalable, debemos separar tres conceptos clave dentro de cada atributo:<\/p>\n<ul style='color: #cbd5e0; margin-bottom: 15px;'>\n<li><strong style='color: #fff;'>BaseValue:<\/strong> El valor puro (ej. 100 de salud inicial).<\/li>\n<li><strong style='color: #fff;'>Value (M\u00e1ximo Final):<\/strong> El resultado de aplicar modificadores (buffs\/talentos) al BaseValue.<\/li>\n<li><strong style='color: #fff;'>CurrentValue:<\/strong> El recurso actual (ej. la vida que te queda tras un golpe).<\/li>\n<\/ul>\n<div style='background-color: rgba(255, 255, 255, 0.05); border-left: 3px solid #f687b3; padding: 15px; margin-bottom: 20px; border-radius: 0 8px 8px 0;'>Esta distinci\u00f3n permite que, si un talento te da +20% de salud, el sistema recalcule el &#8216;Value&#8217; autom\u00e1ticamente sin perder el rastro de cu\u00e1nta vida &#8216;CurrentValue&#8217; ten\u00edas en ese momento.<\/div>\n<h3 style='color: #39FF14; margin-top: 30px; font-weight: 700; letter-spacing: 0.5px;'>2. Arquitectura Reactiva: El fin del Update()<\/h3>\n<p style='margin-bottom: 15px;'>Uno de los mayores errores de rendimiento es actualizar la UI o la l\u00f3gica de juego preguntando constantemente: \u00ab\u00bfHa cambiado la vida?\u00bb. MAS utiliza un modelo <em style='color: #fff;'>Event-Driven<\/em>. El <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>AttributeManager<\/code> dispara un evento solo cuando ocurre un cambio real.<\/p>\n<p><code style='display:block; background: #1a202c; color: #68d391; padding: 10px; border-radius: 5px; margin: 5px 0; font-family: monospace; border: 1px solid #2d3748;'>attributeManager.OnAttributeChanged += MiFuncionDeUI;<\/code><\/p>\n<p style='margin-bottom: 15px;'>Gracias a esto, tus barras de vida (<code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>AttributeBarUI<\/code>) consumen cero recursos de CPU mientras el jugador no recibe da\u00f1o.<\/p>\n<h3 style='color: #39FF14; margin-top: 30px; font-weight: 700; letter-spacing: 0.5px;'>3. Modificadores No Destructivos (Buffs y Debuffs)<\/h3>\n<p style='margin-bottom: 15px;'>\u00bfQu\u00e9 pasa si bebes una poci\u00f3n que aumenta tu fuerza un 50% durante 10 segundos? En un sistema tradicional, tendr\u00edas que guardar el valor anterior manualmente. Con MAS, simplemente a\u00f1ades un <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>AttributeModifier<\/code>:<\/p>\n<p><code style='display:block; background: #1a202c; color: #68d391; padding: 10px; border-radius: 5px; margin: 5px 0; font-family: monospace; border: 1px solid #2d3748;'>var buff = new AttributeModifier(0.5f, ModifierType.PercentAdd, this);<br \/>attributeManager.AddModifier('Strength', buff);<\/code><\/p>\n<p style='margin-bottom: 15px;'>Cuando el tiempo expira, el sistema retira el modificador y tu fuerza vuelve a su estado original sin errores de redondeo ni variables temporales sucias.<\/p>\n<h3 style='color: #39FF14; margin-top: 30px; font-weight: 700; letter-spacing: 0.5px;'>4. Progresi\u00f3n y Talentos: El siguiente nivel<\/h3>\n<p style='margin-bottom: 15px;'>Un sistema RPG no est\u00e1 completo sin progresi\u00f3n. MAS incluye un <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>ExperienceManager<\/code> que gestiona curvas de nivel personalizables y un sistema de talentos basado en <code style='display:inline; background: #1a202c; color: #68d391; padding: 2px 5px; border-radius: 3px; font-family: monospace;'>ScriptableObjects<\/code>.<\/p>\n<p style='margin-bottom: 15px;'>Puedes dise\u00f1ar \u00e1rboles de habilidades complejos donde cada punto invertido aplique modificadores a tus atributos base. Todo se configura visualmente desde el inspector, eliminando la posibilidad de errores por errores de tipeo gracias a nuestros editores personalizados con men\u00fas desplegables.<\/p>\n<hr style='border: 0; border-top: 1px solid #4a5568; margin: 30px 0;'>\n<h4 style='color: #fff; margin-top: 30px; font-weight: 600;'>Conclusi\u00f3n<\/h4>\n<p style='margin-bottom: 15px;'>Construir un RPG s\u00f3lido requiere cimientos profesionales. El <strong style='color: #39FF14;'>Modular Attributes &#038; Stats<\/strong> no es solo una colecci\u00f3n de variables; es un ecosistema completo que te permite centrarte en lo divertido (dise\u00f1ar habilidades y balancear el juego) en lugar de pelear con el c\u00f3digo espagueti.<\/p>\n<div style='background: linear-gradient(145deg, #1a202c, #2d3748); border: 1px solid #4a5568; padding: 25px; border-radius: 12px; margin-top: 40px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.3);'>\n<p style='margin-bottom: 10px; font-weight: bold; color: #fff; font-size: 1.1em;'>Mejora tu juego hoy<\/p>\n<p style='margin-bottom: 0; color: #cbd5e0;'>Consigue este asset en la <a href='#' style='color: #39FF14; text-decoration: underline; font-weight: bold;'>Unity Asset Store<\/a>.<\/p>\n<\/p><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Todo desarrollador indie de RPG ha pasado por lo mismo: empiezas con un script de jugador sencillo, a\u00f1ades un public float health, luego mana, stamina, strength&#8230; y antes de que te des cuenta, tienes un monolito de 2000 l\u00edneas imposible de mantener. El problema no es solo el desorden; es la falta de reactividad. \u00bfC\u00f3mo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=62"}],"version-history":[{"count":0,"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/posts\/62\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.noocturnalgamesstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}