public override void OnInspectorGUI() { base.DrawDefaultInspector(); PlayerAttack playerAttack = target as PlayerAttack; // Update if the attack lists were altered bool update = playerAttack.Clean(); GUILayout.Space(20); GUILayout.BeginHorizontal(); GUILayout.Label("Attack 1 Moves:"); if (GUILayout.Button("Add Attack 1 Move")) { CreateChildPlayerAttack(playerAttack, playerAttack.AddAttack1Move); } GUILayout.EndHorizontal(); if (DrawPlayerAttacks(playerAttack.Attack1Moves.Where(x => x != null).ToList())) { update = true; } GUILayout.Space(20); GUILayout.BeginHorizontal(); GUILayout.Label("Attack 2 Moves:"); if (GUILayout.Button("Add Attack 2 Move")) { CreateChildPlayerAttack(playerAttack, playerAttack.AddAttack2Move); } GUILayout.EndHorizontal(); if (DrawPlayerAttacks(playerAttack.Attack2Moves.Where(x => x != null).ToList())) { update = true; } GUILayout.Space(20); if (useTemplate) { GUILayout.BeginHorizontal(); GUILayout.Label("Use Template To Set Values"); string[] templatePaths = GetAttackTemplates(); selection = EditorGUILayout.Popup(selection, StripPaths(templatePaths)); GUILayout.EndHorizontal(); if (GUILayout.Button("Set With " + StripPaths(templatePaths)[selection])) { var template = AssetDatabase.LoadAssetAtPath(templatePaths[selection], typeof(PlayerAttackTemplate)); (template as PlayerAttackTemplate).SetWithTemplate(ref playerAttack); useTemplate = false; } GUILayout.Space(20); if (GUILayout.Button("Cancel")) { useTemplate = false; } } else { if (GUILayout.Button("Use Template To Set Values")) { useTemplate = true; } } if (update) { try{ var instance = PrefabUtility.FindPrefabRoot(playerAttack.AccessAttackHandler.gameObject); PrefabUtility.ReplacePrefab(instance, PrefabUtility.GetPrefabParent(instance), ReplacePrefabOptions.ConnectToPrefab); } catch { } } }