Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

315
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda