public override void RenderAdditionalGui(Component affectedComponent, ExposedPropertyConfiguration propertyConfiguration) { if (!(propertyConfiguration.AdditionalData is ObjectOfTypeData)) { propertyConfiguration.AdditionalData = new ObjectOfTypeData(); } ObjectOfTypeData objectOfTypeData = (ObjectOfTypeData)propertyConfiguration.AdditionalData; //beginHorizontal is in code before objectOfTypeData.FilterByName = UnityEditor.EditorGUILayout.ToggleLeft("Filter by name", objectOfTypeData.FilterByName, GUILayout.Width(100)); UnityEditor.EditorGUI.BeginDisabledGroup(!objectOfTypeData.FilterByName); objectOfTypeData.NameFilter = UnityEditor.EditorGUILayout.TextField(objectOfTypeData.NameFilter); UnityEditor.EditorGUILayout.EndHorizontal(); UnityEditor.EditorGUILayout.BeginHorizontal(); objectOfTypeData.AddCurrentNamePrefix = UnityEditor.EditorGUILayout.ToggleLeft("Add gameObject name as prefix", objectOfTypeData.AddCurrentNamePrefix, GUILayout.Width(200)); if (affectedComponent != null) { string usedFilter = !objectOfTypeData.FilterByName ? "" : GetCurrentNameFilter(affectedComponent.name, objectOfTypeData); UnityEditor.EditorGUILayout.EndHorizontal(); UnityEditor.EditorGUILayout.BeginHorizontal(); UnityEditor.EditorGUILayout.LabelField("Used filter: " + usedFilter); } //endHorizontal is in code after UnityEditor.EditorGUI.EndDisabledGroup(); }
private T[] FindObjectsOfType <T>(Component affectedComponent, Type fieldType, ExposedPropertyConfiguration propertyConfiguration) where T : Object { ObjectOfTypeData objectOfTypeData = (ObjectOfTypeData)propertyConfiguration.AdditionalData; T[] objects = Object.FindObjectsOfType(fieldType) as T[]; //without filtering by name if (!objectOfTypeData.FilterByName) { return(objects); } if (objects == null) { return(null); } string currentNameFilter = GetCurrentNameFilter(affectedComponent.name, objectOfTypeData); List <T> filteredObjects = new List <T>(); foreach (var unityObject in objects) { if (unityObject.name == currentNameFilter) { filteredObjects.Add(unityObject); } } return(filteredObjects.ToArray()); }
private T FindObjectOfType <T>(Component affectedComponent, Type fieldType, ExposedPropertyConfiguration propertyConfiguration) where T : Object { ObjectOfTypeData objectOfTypeData = (ObjectOfTypeData)propertyConfiguration.AdditionalData; //without filtering by name if (!objectOfTypeData.FilterByName) { return(Object.FindObjectOfType(fieldType) as T); } string currentNameFilter = GetCurrentNameFilter(affectedComponent.name, objectOfTypeData); Object[] objects = Object.FindObjectsOfType(fieldType); foreach (var unityObject in objects) { if (unityObject.name == currentNameFilter) { return(unityObject as T); } } return(null); }
/// <summary> /// Returning just name filter or name filter prefixed with gameobject name, according to configuration /// </summary> /// <param name="gameObjectName"></param> /// <param name="propertyConfiguration"></param> /// <returns></returns> private string GetCurrentNameFilter(string gameObjectName, ObjectOfTypeData propertyConfiguration) { return(propertyConfiguration.AddCurrentNamePrefix ? gameObjectName + propertyConfiguration.NameFilter : propertyConfiguration.NameFilter); }