- Home /
Editor Script does not save changes
I have created an Script to connect the tiles that are near in my game. It works when I'm working on the editor but when I run the game or close the program, all the changes are erased. How to save the changes?
using UnityEngine;
using UnityEditor;
public class ConnectTilesButton
{
[MenuItem("Utils/Connect Tiles")]
public static void ConnectTiles()
{
Tile[] tiles = Resources.FindObjectsOfTypeAll<Tile>();
for (int i = 0; i < tiles.Length; i++)
{
Undo.RecordObject(tiles[i], "removeTile");
tiles[i].PositionsConected.Clear();
}
for (int i = 0; i < tiles.Length; i++)
{
Undo.RecordObject(tiles[i], "addTile");
for (int j = 0; j < tiles.Length; j++)
{
if (tiles[i] != tiles[j] || tiles[i].PositionsConected.Contains(tiles[j]))
{
if (Vector3.Distance(tiles[i].gameObject.transform.position, tiles[j].gameObject.transform.position) <= 1.1f)
{
Undo.RecordObject(tiles[i], "addTile");
tiles[i].PositionsConected.Add(tiles[j]);
}
else
{
Undo.RecordObject(tiles[i], "removeTile");
if (tiles[i].PositionsConected.Contains(tiles[j]))
tiles[i].PositionsConected.Remove(tiles[j]);
}
}
}
}
}
}
$$anonymous$$ake sure to set the objects as Dirty with EditorUtility.SetDirty()
and then at the end, call to the AssetDatabase.SaveAssets()
function
You meen like this? It's not working too.
for (int i = 0; i < tiles.Length; i++)
{
EditorUtility.SetDirty(tiles[i]);
Undo.RecordObject(tiles[i], "addTile");
for (int j = 0; j < tiles.Length; j++)
{
if (tiles[i] != tiles[j] || tiles[i].PositionsConected.Contains(tiles[j]))
{
if (Vector3.Distance(tiles[i].gameObject.transform.position, tiles[j].gameObject.transform.position) <= 1.1f)
{
Undo.RecordObject(tiles[i], "addTile");
tiles[i].PositionsConected.Add(tiles[j]);
}
else
{
Undo.RecordObject(tiles[i], "removeTile");
if (tiles[i].PositionsConected.Contains(tiles[j]))
tiles[i].PositionsConected.Remove(tiles[j]);
}
}
}
}
AssetDatabase.SaveAssets();
Answer by Rivomist · Sep 25, 2019 at 11:45 AM
I might be a bit late with answer, but in case some1 also will face same problem, you should firstly serialize object that you want to make changes on:
var serialisedObj = new SerializedObject(objectYouWantToChange);
//finding property you want to modify, in this case its vector3,
//could be either all custom classes
serialisedObj.FindProperty("myVectorPropertyToModify").vector3Value = newValue;
//will apply all changes to your object in scene
serialisedObj.ApplyModifiedProperties();
Hope it will help someone
Thanks for the answer! This works! For those who are working with their own type, objectReferenceValue is the one to use.
serialisedObj.FindProperty("variableName").objectReferenceValue
Your answer
Follow this Question
Related Questions
How to modify prefab permanently via script. 0 Answers
Variables modified on other scripts through a Editor Script reset on Play? 1 Answer
How do you run File->Build Settings... from code? 0 Answers
Bind to OnWillSaveAssets and force to save my scene 0 Answers
Unity Editor: Calling EditorCoroutine from MenuItem 2 Answers