public static Component SelectComponentField <T>(Rect postion, Component c, string title) where T : Component { Rect r2; Rect r1 = Layout.Divide.Golden(postion, out r2); Rect r2_1 = Layout.Divide.FirstRect(r2, 2); Rect r2_2 = Layout.Divide.NextRect(r2_1); EditorGUI.LabelField(r1, title); EditorGUI.BeginChangeCheck(); var g = EditorGUI.ObjectField(r2_1, c ? c.gameObject : null, typeof(GameObject), true) as GameObject; if (EditorGUI.EndChangeCheck()) { if (g) { SelectComponentWindow.Show <T>(g, c.GetInstanceID().ToString()); } } EditorGUI.LabelField(r2_2, c ? c.GetType().Name : "Null"); if (SelectComponentWindow.CanPick(c.GetInstanceID().ToString())) { return(SelectComponentWindow.GetPick()); } else { return(c); } }
protected override void OnDraw(Rect position, SerializedProperty property, GUIContent label) { if (property.propertyType == SerializedPropertyType.String) { var go = (property.serializedObject.targetObject as Component).gameObject; Rect newpos = position.WidthNew(position.width - 16f * 3f); Rect r1 = new Rect(newpos.xMax, newpos.y, 16f * 3, newpos.height); if (GUI.Button(r1, "Select")) { SelectComponentWindow.Show <Component>(go, property.propertyPath); } if (SelectComponentWindow.CanPick(property.propertyPath)) { var com = SelectComponentWindow.GetPick(); if (com) { property.stringValue = com.GetType().Name; } else { property.stringValue = ""; } property.serializedObject.ApplyModifiedProperties(); } EditorGUI.PropertyField(newpos, property, label); } else { base.OnDraw(position, property, label); } }
public static Component SelectComponentField <T>(Component c, string title, params GUILayoutOption[] options) where T : Component { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); var go = EditorGUILayout.ObjectField(c ? c.gameObject : null, typeof(GameObject), true, options) as GameObject; if (EditorGUI.EndChangeCheck()) { if (go) { SelectComponentWindow.Show <T>(go, c.GetInstanceID().ToString()); } } EditorGUILayout.LabelField(c ? c.GetType().Name : "Null"); EditorGUILayout.EndHorizontal(); if (SelectComponentWindow.CanPick(c.GetInstanceID().ToString())) { return(SelectComponentWindow.GetPick()); } else { return(c); } }