Noticias

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

Modificar script en "modo editor"

Iniciado por lcnvdl, Diciembre 27, 2015, 09:07:32 PM

Tema anterior - Siguiente tema
Buenas gente, estoy haciendo una mini herramienta para ayudarme un poco a no hacer tantas tareas manuales, pero estoy teniendo un problema.El script lo que hace es transformar cambiar el valor teamId del componente TeamScript de varios objetos. Cuando ejecuto el script funciona, modifica los objetos. El tema es que cuando toco "play" esos cambios se pierden, y de hecho, cuando vuelvo a la escena siguen como estaban. No se guardan los cambios.Este es mi Script:
    [MenuItem("Tools/FAH/Toggle Team")]
    public static void ToggleTeam()
    {
        if (Selection.activeTransform == null)
        {
            Debug.LogWarning("Nothing to change. Please select a TeamSide.");
        }
        else
        {
            if (Selection.activeTransform.name == "TeamRight" || Selection.activeTransform.name == "TeamLeft")
            {
                int i = 0;

                foreach(var ts in Selection.activeTransform.GetComponentsInChildren<TeamScript>()) {
                    ts.teamId = ts.teamId == 1 ? 2 : 1;
                    i++;
                }

                Debug.Log("Changed " + i + " objects");
            }
            else
            {
                Debug.LogWarning("Toggle Team must be applied only on TeamLeft and TeamRight object.");
            }
        }
    }
 Ideas? Desde ya, muchas gracias. 

Prueba a destruir el componente, y sustituirlo por uno nuevo con los parámetros modificados.Por si sigue sin funcionar, añade un constructor a la clase.

Diciembre 29, 2015, 08:53:03 AM #2 Ultima modificación: Diciembre 30, 2015, 01:08:49 PM por Quel
Varias cosas:1) Los scripts tienen que ser marcados como Serializables, poniendo un [Serializable] justo antes de declarar el script. Los scripts que heredan del Monobehaviour ya son Serializados por defecto.
2) A parte de eso, las variables también tienen que ser marcadas para que sean serializadas. Para ello basta con hacerlas públicas o poner un [SerializeField] justo delante la declaración de la variable (http://docs.unity3d.com/ScriptReference/SerializeField.html">http://docs.unity3d.com/ScriptReference/SerializeField.html).
2) Después de cambiar el valor de un script, no esta de mas que lo marques como que "ha cambiado". Así Unity sabe que ese script ha cambiado de valores y tiene que volver a guardarlo. Se hace con el SetDirty (http://docs.unity3d.com/ScriptReference/EditorUtility.SetDirty.html">http://docs.unity3d.com/ScriptReference/EditorUtility.SetDirty.html)Para mas información, repasa este enlace: http://docs.unity3d.com/Manual/script-Serialization.html">http://docs.unity3d.com/Manual/script-Serialization.html

Muchas gracias a ambos!Con lo de SetDirty funciona!! muchas gracias 

Etiquetas: