Jump to content
UnitySpain

Search the Community

Showing results for tags 'inspector'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Inicio
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
  • Mesa de ayuda
    • Unity
    • Arte
    • Otras Especialidades
    • Builds & Dispositivos
  • Aportes de la Comunidad
    • Recursos
    • Eventos
    • Buenas Prácticas
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

  • byGui

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 2 results

  1. 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?
  2. Pues resulta que he hecho un script de Editor/Inspector de unity para hacer que una lista, que puede modificarse desde el inspector, sea ordenable. Para esto hay muchos tutoriales en internet. El script funciona bien, adjunto una imagen del inspector. El problema es que al cerrar Unity y volver a abrirlo, los cambios han desaparecido, no se guardan. Es decir, cualquier cambio que le haga en la lista (añadir, quitar o modificar valores) se mantiene hasta que cierre Unity. Cuando vuelvo a abrir los cambios han desaparecido... Os dejo aquí el código, a ver si me podéis ayudar: [CustomEditor(typeof(Dialog))] public class DialogEventInspector : Editor { private ReorderableList reorderableList; private float[] sizes; private float[] steps; private float[] spaces; private Dialog dialog { get { return target as Dialog; } } private void OnEnable() { reorderableList = new ReorderableList(dialog.DialogEvents, typeof(DialogEvent), true, true, true, true); // for rects in draw sizes = new float[] { 0.19f, 0.19f, 0.19f, 0.08f, 0.03f, 0.18f, 0.08f}; steps = new float[sizes.Length]; float sum = 0.03f; for(int i = 0; i<sizes.Length; ++i) { steps[i] = sum; sum += sizes[i]; } spaces = new float[] { 0.5f, 0.8f, 0.85f, 0.55f, 0.23f, 0.4f, 0.45f}; // Add listeners to draw events reorderableList.drawHeaderCallback += DrawHeader; reorderableList.drawElementCallback += DrawElement; reorderableList.onAddCallback += AddItem; reorderableList.onRemoveCallback += RemoveItem; } private void OnDisable() { // Make sure we don't get memory leaks etc. reorderableList.drawHeaderCallback -= DrawHeader; reorderableList.drawElementCallback -= DrawElement; reorderableList.onAddCallback -= AddItem; reorderableList.onRemoveCallback -= RemoveItem; } private void DrawHeader(Rect rect) { GUI.Label(rect, getSpaceOf(0, rect) + "Name" + getSpaceOf(1, rect) + "Type"+ getSpaceOf(2, rect) + "Item"+ getSpaceOf(3, rect)+"GT" + getSpaceOf(4, rect) + "N"+ getSpaceOf(5, rect) + "Text" + getSpaceOf(6, rect) + "Darken"); } private string getSpaceOf(int i, Rect rect) { string space = ""; int Spaces = (int)(rect.width / 20 * spaces[i]); for (int k = 0; k < Spaces; ++k) space += ' '; return space; } private void DrawElement(Rect rect, int index, bool active, bool focused) { DialogEvent item = dialog.DialogEvents[index]; EditorGUI.BeginChangeCheck(); EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width * 0.03f, rect.height), index.ToString()); item.Name = EditorGUI.TextField(new Rect(rect.x + steps[0]*rect.width, rect.y, sizes[0]*rect.width, rect.height), item.Name); item.eventType = (DialogEvent.EventType) EditorGUI.EnumPopup(new Rect(rect.x + steps[1]*rect.width, rect.y, rect.width*sizes[1], rect.height), item.eventType); item.Item = (DialogResource) EditorGUI.ObjectField(new Rect(rect.x + steps[2]*rect.width, rect.y, rect.width*sizes[2], rect.height), item.Item, typeof(DialogResource), true); item.GradualTime = EditorGUI.FloatField(new Rect(rect.x + steps[3] * rect.width, rect.y, rect.width * sizes[3] *0.75f, rect.height), item.GradualTime); item.PassToNext = EditorGUI.Toggle(new Rect(rect.x + steps[4] * rect.width, rect.y, rect.width * sizes[2], rect.height), item.PassToNext); item.Text = (DialogText)EditorGUI.ObjectField(new Rect(rect.x + steps[5] * rect.width, rect.y, rect.width * sizes[5], rect.height), item.Text, typeof(DialogText), true); item.Darken = EditorGUI.Toggle(new Rect(rect.x + steps[6] * rect.width*1.02f, rect.y, rect.width * sizes[6], rect.height), item.Darken); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); } } private void AddItem(ReorderableList list) { dialog.DialogEvents.Add(new DialogEvent()); EditorUtility.SetDirty(target); } private void RemoveItem(ReorderableList list) { dialog.DialogEvents.RemoveAt(list.index); EditorUtility.SetDirty(target); } public override void OnInspectorGUI() { serializedObject.Update(); base.OnInspectorGUI(); // Actually draw the list in the inspector reorderableList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); } }
×
×
  • Create New...