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.
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
Muchas gracias a ambos!Con lo de SetDirty funciona!! muchas gracias