Noticias

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

[Ayuda] Variable no se actualiza correctamente (CustomEditor)

Iniciado por Null, Agosto 25, 2017, 07:49:00 PM

Tema anterior - Siguiente tema
Agosto 25, 2017, 07:49:00 PM Ultima modificación: Agosto 25, 2017, 07:51:01 PM por Null
Supongamos que tengo el siguiente código que controla la variable vida de un enemigo:
 

public class EnemyHealth : MonoBehaviour {
     float currentHealth;
float amount      = .5f;
float maxHealth = 100;
 
public float CurrentHealth { get { return currentHealth; } set { currentHealth = value; } }
 
void Update() {
        if (currentHealth <   maxHealth) currentHealth += Time.deltaTime * amount;
        if (currentHealth >= maxHealth) currentHealth   = maxHealth;
        if (currentHealth <= 0f)               currentHealth   = 0f;
}
}

 
Y también tengo este CustomEditor:
 

[CustomEditor(typeof(EnemyHealth))]
public class EnemyHealthEditor : Editor {
     
     public override void OnInspectorGUI() {
        
         EnemyHealth enemyHealth  = (EnemyHealth)target;
         enemyHealth.CurrentHealth = EditorGUILayout.FloatField("Health", enemyHealth.CurrentHealth);
    }
}

 
El problema que tengo es que la variable (en el inspector) no se actualiza cuando es < maxHealth, tal como indica su código... Si por ejemplo le pongo el valor 55 en el inspector, vuelve a 0, sin actualizarse.

Antes de haber escrito el CustomEditor, simplemente tenía la variable en public y se actualizaba bien.
Peor aún: He notado que si pongo el mouse encima del inspector (sin hacer clicks de ningún tipo), y lo muevo hacia otra ventana de Unity, sí se actualiza... (?)
 
>>> Vídeo de muestra (nótese que no estoy haciendo dragging)


Cómo lo soluciono? 

debes colocar [SerializedField] a currentHealt o en su defecto hacerla publica, para que unity pueda serializarla y usar su valor desde el inspector, y si no estoy mal deberias colocar esto antes de terminar el OnInspectoGUI , https://pastebin.com/Ym4FZsJn (la herramienta de colocar codigo en el post no me funciona?), ya que si no lo haces podrias perder los cambios cada vez que cambies de scena todo depende de si estas usando estu en un prefab o un objeto de scena, en fin todo esto son cosas que hace unity sin darnos cuenta pero que debmos manejar nosotros mismos al usar codigo del editor
 
 

Etiquetas: