Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

316
Vistas
Unity restablece el valor del parámetro establecido con la secuencia de comandos del Editor en reproducción

Configuré un script de editor muy simple en Unity 2020.2.1f1 que, al presionar un botón Inspector, debería cambiar el valor de un parámetro específico a un valor establecido en el código.

 public override void OnInspectorGUI() { DrawDefaultInspector(); StateObject s = (StateObject)target; if (s.objID == 0) { if (GUILayout.Button("Generate Object ID")) { GenerateID(s); } } } public void GenerateID(StateObject s) { s.objID = DateTimeOffset.Now.ToUnixTimeSeconds(); }

Todo esto funciona como se supone que debe hacerlo. Presiono el botón, aparece el número correcto en el campo y estoy feliz. Sin embargo, una vez que cambio al modo de reproducción, el valor se restablece al valor predeterminado prefabricado y permanece así incluso cuando desactivo el modo de reproducción.

¿Me estoy perdiendo alguna función ApplyChange o algo así?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

(EDITAR: Esto funciona, pero no es tan bueno como la respuesta aceptada).

Bueno, sí, de hecho, me falta algún tipo de función ApplyChange.

No sé cómo me lo perdí, pero estaba buscando esto:

 EditorUtility.SetDirty(target);

Entonces, en mi script, solo editaría la función GenerateID:

 public void GenerateID(StateObject s) { s.objID = DateTimeOffset.Now.ToUnixTimeSeconds(); EditorUtility.SetDirty(s); }

Y lo estoy publicando aquí en caso de que alguien se encuentre con el mismo problema, de esa manera, con suerte, no tendrán que pasar tanto tiempo buscando una solución antes de recordar que SetDirty existe.

over 4 years ago · Santiago Trujillo Denunciar

0

En mi opinión, es mejor que mezclar los accesos directos desde los scripts del Editor y luego marcar manualmente las cosas sucias en lugar de pasar por SerializedProperty y dejar que el Inspector se encargue de todo (también el marcado sucio y guardar cambios, manejar deshacer/rehacer, etc.)

 SerializedProperty id; private void OnEnable() { id = serializedObject.FindProperty("objID"); } public override void OnInspectorGUI() { DrawDefaultInspector(); // Loads the actual values into the serialized properties // See https://docs.unity3d.com/ScriptReference/SerializedObject.Update.html serializedObject.Update(); if (id.intValue == 0) { if (GUILayout.Button("Generate Object ID")) { id.intValue = DateTimeOffset.Now.ToUnixTimeSeconds(); } } // Writes back modified properties into the actual class // Handles all marking dirty, undo/redo, etc // See https://docs.unity3d.com/ScriptReference/SerializedObject.ApplyModifiedProperties.html serializedObject.ApplyModifiedProperties(); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda