- Home /
Custom Inspector to Load Instance Values
I wrote a custom inspector for my soundtrack manager items. I want the items to load in the list of names of all the tracks that are set in a local instance of a 3rd party toolkit. The names load with no problem, however, Unity crashes each and every time I try and change something via the inspector and then try to play. I notice that if I hard-code the values in the inspector list, it runs without crashing so I think it's safe to assume it's the retrieval of the names array from the local instance that is causing it to crash.
 Could not allocate memory: System out of memory!
 Trying to allocate: 536870912B with 16 alignment. MemoryLabel: DynamicArray
 Allocation happend at: Line:333 in ./Runtime/Utilities/dynamic_array.h
 Memory overview
Is there a better way to automatically load this list in?
//custom inspector script
 using UnityEngine;
 using UnityEditor;
 
 [CustomEditor(typeof(soundtrackItem))]
 [ExecuteInEditMode]
 public class soundtrackEditor : Editor
 {
     public int index = 0;
     public string[] options = new []{"not loaded"};
 
     void Awake()
     {
         loadList();
     }
 
     void loadList()
     {
         options = new string[AudioController.GetCategory("Soundtrack").AudioItems.Length];
         for(int i=0; i<options.Length; i++)
         {
             options[i]=AudioController.GetCategory("Soundtrack").AudioItems[i].Name;
         }
     }
 
     public override void OnInspectorGUI()
     {
         var someClass = target as soundtrackItem;
         index = EditorGUILayout.Popup("Audio Clip", someClass.audioIndex, options);
         someClass.audioClip = options[index];
         someClass.audioIndex = index;
         someClass.startingTime = EditorGUILayout.FloatField ("Starting Time", someClass.startingTime);
         someClass.endingTime = EditorGUILayout.FloatField ("Ending Time", someClass.endingTime);
         someClass.doesTrackLoop = EditorGUILayout.Toggle ("Does Track Loop?", someClass.doesTrackLoop); 
         someClass.autoplayNext = EditorGUILayout.Toggle ("Auto-Play Next Track?", someClass.autoplayNext);
         someClass.loadNextLevel = EditorGUILayout.IntField ("Load Level", someClass.loadNextLevel);
         if(GUILayout.Button("Reload Tracks"))
         {
             loadList();
         }
         EditorUtility.SetDirty(target);
 
     }
 }
Any ideas? I've been trying to do a few different things so if it looks a little messy it's because I've been tossing it around a bit. Also, if there is way I can avoid using an array in EditorGUILayout.Popup that isn't too involved, that's preferred can't stand using arrays
Any advice is greatly appreciated.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                