Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: lcnvdl en Diciembre 27, 2015, 09:07:32 PM

Título: Modificar script en "modo editor"
Publicado por: lcnvdl en Diciembre 27, 2015, 09:07:32 PM
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. 
Título: Modificar script en "modo editor"
Publicado por: kaito en Diciembre 28, 2015, 08:47:18 PM
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.
Título: Modificar script en "modo editor"
Publicado por: Quel en Diciembre 29, 2015, 08:53:03 AM
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).
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)Para mas información, repasa este enlace: http://docs.unity3d.com/Manual/script-Serialization.html
Título: Modificar script en "modo editor"
Publicado por: lcnvdl en Diciembre 30, 2015, 01:22:23 AM
Muchas gracias a ambos!Con lo de SetDirty funciona!! muchas gracias