private void CreateButton <T>(MenuSettings <T> settings) where T : UnityEngine.Object { EditorGUILayout.BeginHorizontal(); T[] objs = FindObjectsOfType <T>(); string[] names = objs.Select(x => x.name).ToArray(); string msg = ""; if (ArrayUtility.Contains(names, settings.name)) { msg = "Duplicate name"; GUI.enabled = false; } if (settings.name == "") { msg = "Empty Name"; GUI.enabled = false; } EditorGUILayout.LabelField(msg, GUILayout.Width(197)); if (GUILayout.Button("Create", LayoutSettings.buttonOp)) { GameObject obj = new GameObject(settings.name); //Controller. if (typeof(T) == typeof(ControllerOutput)) { //Create Controller. ControllerObject cont = (ControllerObject)obj.AddComponent(System.Type.GetType(string.Format("Gimbl.{0}", contType.ToString()))); cont.InitiateController(); //Create general Output Object and link. ControllerOutput contOut = obj.AddComponent <ControllerOutput>(); contOut.master = cont; // Select created. settings.selectedObj = contOut as T; } //Actor. if (typeof(T) == typeof(ActorObject)) { ActorObject act = obj.AddComponent <ActorObject>(); act.InitiateActor(actorModels[selectedModel], trackCam); settings.selectedObj = act as T; } //Path. if (typeof(T) == typeof(PathCreator)) { CreatePath(settings as MenuSettings <PathCreator>, obj); } settings.name = ""; } EditorGUILayout.EndHorizontal(); }