Custom Grid class
public byte[] Serialize()
{
...
{
...
{
writer.Write(Items.Count);
foreach (var item in Items)
{
writer.Write(item.Key.x);
writer.Write(item.Key.y);
writer.Write(item.Value.id);
}
bytes = ms.ToArray();
}
}
return bytes;
}
public void Import(byte[] buffer, CustomGridPalette targetPalette)
{
...
{
...
{
int count = reader.ReadInt32();
for (int i = 0; i < count; i++)
{
var xPos = reader.ReadInt32();
var yPos = reader.ReadInt32();
var id = reader.ReadInt32();
var pos = new Vector2Int(xPos, yPos);
AddItem(pos, targetPalette.GetItem(id));
}
}
}
}
CustomGrid 클래스에서 맵을 저장하는 Items dictionary를 저장하고 로드할 수 있도록
serialize와 deserialize 함수를 구현
Tool Window class
void DrawEditMode()
{
GUILayout.BeginHorizontal(EditorStyles.toolbar);
{
...
if (GUILayout.Button("load", EditorStyles.toolbarButton))
{
Load();
}
if (GUILayout.Button("save", EditorStyles.toolbarButton))
{
Save();
}
}
GUILayout.EndHorizontal();
...
}
DrawEditMode 시에 load, save 버튼을 만들고 클릭될 시 해당 함수들을 실행
private void Save()
{
var path = EditorUtility.SaveFilePanel("save map data", Application.dataPath, "MapData.bin", "bin");
...
byte[] data = targetGrid.Serialize();
File.WriteAllBytes(path, data);
ShowNotification(new GUIContent("save success"), 3);
}
private void Load()
{
var path = EditorUtility.OpenFilePanel("load map data", Application.dataPath, "bin");
...
var bytes = File.ReadAllBytes(path);
if (bytes != null)
{
targetGrid.Import(bytes, targetPalette);
ShowNotification(new GUIContent("load success"), 3);
}
SaveFilePanel 함수를 통하여 파일의 저장 위치를 간단히 지정하도록 할 수 있음
ShowNotification 함수를 통하여 일시적인 메세지 박스를 띄울 수 있음
OpenFilePanel 함수를 통하여 로드하려는 파일의 위치를 간단히 얻어올 수 있음