using System; using System.Collections.Generic; using System.IO; using Newtonsoft.Json; using UnityEngine; namespace Stary.Evo.InformationSave { public abstract class AbstractInformation : CustomEditorBase where T : InformationBase, new() { [HideInInspector] public List _list = new List(); public virtual void Add() { _list.Add(new T()); Save(_list.Count - 1); } public abstract void Save(int index); public abstract void Switch(int index); public virtual void Delete(int index) { _list.RemoveAt(index); } public virtual void Set(string desc) { int index = _list.FindIndex(n => n.desc == desc); if (index != -1) Switch(index); } #region Editor #if UNITY_EDITOR private string _path; private string _directoryPath; private void SetPath() { _directoryPath = Application.persistentDataPath + "/Ignore"; _path = _directoryPath + "/" + mationID; } //更新 public void UpdateInformation() { SetPath(); if (File.Exists(_path) == false) { Debug.LogError("不存在更新文件:" + _path); return; } var json = File.ReadAllText(_path); List tempList = JsonConvert.DeserializeObject>(json); if (tempList != null && tempList.Count > 0) { _list.Clear(); _list.AddRange(tempList); Debug.Log("更新成功!"); } } //动态保存 public bool PlayingSave() { if (UnityEditor.EditorApplication.isPlaying) { SetPath(); if (Directory.Exists(_directoryPath) == false) Directory.CreateDirectory(_directoryPath); var json = JsonConvert.SerializeObject(_list); File.WriteAllText(_path,json); Debug.Log("动态保存成功!"); return true; } return false; } //绘制 public override void Draw() { int length = _list.Count; int deleteIndex = -1; for (int i = 0; i < length; i++) { GUILayout.BeginHorizontal(); _list[i].desc = UnityEditor.EditorGUILayout.TextField(_list[i].desc); if (GUILayout.Button("切换")) Switch(i); if (GUILayout.Button("保存")) { Save(i); if (PlayingSave() == false) Debug.Log("保存成功!"); } if (GUILayout.Button("上移") && i > 0) { T temp = _list[i - 1]; _list[i - 1] = _list[i]; _list[i] = temp; } if (GUILayout.Button("下移") && i < _list.Count - 1) { T temp = _list[i + 1]; _list[i + 1] = _list[i]; _list[i] = temp; } if (GUILayout.Button("删除") && UnityEditor.EditorUtility.DisplayDialog("警告", "你确定要删除吗?", "确定", "取消")) deleteIndex = i; GUILayout.EndHorizontal(); if (i != length - 1) GUILayout.Space(20); } if (deleteIndex != -1) Delete(deleteIndex); GUILayout.Space(30); GUILayout.BeginHorizontal(); if (GUILayout.Button("添加")) { Add(); } if (GUILayout.Button("更新") && UnityEditor.EditorUtility.DisplayDialog("提示", "你确定要更新吗?", "确定", "取消")) { UpdateInformation(); GUILayout.BeginHorizontal(); } GUILayout.EndHorizontal(); } #else public override void Draw(){} #endif } #endregion [System.Serializable] public class InformationBase { public string desc = "初始"; } }