private void Initialize(bool retry = true) { overlayViewer = serializedObject.targetObject as OverlayViewer; TempUMAData = overlayViewer.gameObject.GetComponent <UMAData>(); ugb = overlayViewer.gameObject.GetComponent <UMAGeneratorStub>(); TempSlot = new SlotData(overlayViewer.SlotDataAsset); rawImage = overlayViewer.ImageViewer; activeGeneratorCoroutine = new UMAGeneratorCoroutine(); SetupGenerator(); TempUMAData.Initialize(ugb); TempUMAData.SetSlot(0, TempSlot); baseOverlayProperty = serializedObject.FindProperty("BaseOverlay"); overlaysProperty = serializedObject.FindProperty("Overlays"); texMergeProperty = serializedObject.FindProperty("TextureMergePrefab"); overlayDataList = new ReorderableList(serializedObject, overlaysProperty, true, true, false, false); overlayDataList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Overlays"); }; overlayDataList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { var element = overlayDataList.serializedProperty.GetArrayElementAtIndex(index); rect.y += 2; OverlayDataAsset o = element.objectReferenceValue as OverlayDataAsset; string name = "Not Set"; if (o != null) { name = o.overlayName; } EditorGUI.PropertyField(new Rect(rect.x + 10, rect.y, rect.width - 10, EditorGUIUtility.singleLineHeight), element); }; overlayDataList.onSelectCallback = (ReorderableList list) => { SelectNewOverlay(list.index); }; overlayDataList.onChangedCallback = (ReorderableList list) => { SelectNewOverlay(list.index); ProcessCurrentOverlays(retry); }; }