- 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.