using UnityEngine; using UnityEditor; using System.Collections.Generic; public class ClassWindow : EditorWindow { private static ClassWindow window; public List< ClassA > list; [MenuItem ("My Window/Class")] static void Init () { window = EditorWindow.GetWindow (typeof (ClassWindow)) as ClassWindow; Debug.Log("Init"); } private void OnGUI() { if( list == null ) list = new List(); if( window == null ) Init(); GUILayout.BeginArea( new Rect( 10, 10, window.position.width - 20, 75 ) ); GUILayout.BeginHorizontal(); if( GUILayout.Button( "Add Class A", GUILayout.ExpandHeight(true) ) ) list.Add( ScriptableObject.CreateInstance< ClassA >() ); if( GUILayout.Button( "Add Class B", GUILayout.ExpandHeight(true) ) ) list.Add( ScriptableObject.CreateInstance< ClassB >() ); if( GUILayout.Button( "Clear", GUILayout.ExpandHeight(true) ) ) list.Clear(); if( GUILayout.Button( "Save", GUILayout.ExpandHeight(true) ) ) { ClassHolder asset = new ClassHolder(list); //scriptable object Debug.Log( list.Count ); AssetDatabase.CreateAsset(asset, "Assets/classes.asset"); AssetDatabase.SaveAssets(); } if( GUILayout.Button( "Load", GUILayout.ExpandHeight(true) ) ) { Object o = AssetDatabase.LoadAssetAtPath("Assets/classes.asset", typeof(ClassHolder)); Debug.Log( "o : " + o.ToString() ); ClassHolder classHolder = (ClassHolder)o; Debug.Log( "classHolder : " + classHolder ); if( classHolder != null ) list = classHolder.list; } GUILayout.EndHorizontal(); GUILayout.EndArea(); // Once you compile again, this is going to display only 'AAAAAAAAA' GUILayout.BeginArea( new Rect( 10, 110, 200, 200 ) ); GUILayout.Space(20); GUILayout.Label( "Childcount : " + list.Count ); GUILayout.Space(20); foreach( ClassA a in list ) if( a != null ) a.Draw(); GUILayout.EndArea(); } }