private static void InspectionFields(object oRef, EFieldSerializationType serType, SerializedProperty inspect, SerializedProperty inspectedElement) { GUILayout.BeginVertical(GUILayout.Width(32)); var inspectChange = IconButton.Layout(16, inspect.boolValue ? "spy" : "visibleOff"); if (inspectChange) { inspect.boolValue = !inspect.boolValue; } if (inspect.boolValue) { var count = 0; if (serType == EFieldSerializationType.ToArray) { var enu = oRef as System.Collections.IEnumerable; if (enu != null) { foreach (var o in enu) { count++; } } } if (count > 0) { var value = inspectedElement.intValue; value = EditorGUILayout.IntField(value, GUILayout.Width(32)); bool canGoUp = value < (count - 1); EditorGUI.BeginDisabledGroup(!canGoUp); var up = IconButton.Layout("upTriangle", 16, '▲', "", Color.white); EditorGUI.EndDisabledGroup(); bool canGoDown = value > 0; EditorGUI.BeginDisabledGroup(!canGoDown); var down = IconButton.Layout("downTriangle", 16, '▼', "", Color.white); EditorGUI.EndDisabledGroup(); if (up) { value++; } if (down) { value--; } //value = Mathf.Clamp( value, 0, count - 1 ); value = Mathf.Max(value, 0); inspectedElement.intValue = value; } } GUILayout.EndVertical(); }
public static bool Layout(float size, GameObject go) { if (go != null) { var t = AssetPreview.GetAssetPreview(go); if (IconButton.Layout(size, "search")) { EditorGUIUtility.PingObject(go); } return(t != null); } return(false); }
public static void Layout(SerializedProperty property, string newFilePreffix) { EditorGUILayout.BeginHorizontal(); bool valid = (property.objectReferenceValue != null) && (property.objectReferenceValue is T); var id = -1; if (valid) { id = PrefabCache <T> .Cache.IndexOf(property.objectReferenceValue as T); } id++; var iconSize = 20; if (id == 0 && newFilePreffix != null) { if (IconButton.Layout("add", iconSize, '+', "Create new " + typeof(T).ToString() + " prefab", Color.green)) { property.objectReferenceValue = K10EditorGUIUtils.CreateSequentialGO <T>(newFilePreffix + typeof(T)); PrefabCache <T> .Refresh(); } } else { PreviewButton.Layout(iconSize, property.objectReferenceValue as T); } var nid = EditorGUILayout.Popup(id, PrefabCache <T> .NamesWithNone); if (nid != id) { nid--; if (nid < 0) { property.objectReferenceValue = null; } else { property.objectReferenceValue = PrefabCache <T> .Cache[nid]; } } if (IconButton.Layout("refreshButton", iconSize, 'R', "Refresh prefabs loaded", Color.blue)) { PrefabCache <T> .Refresh(); } EditorGUILayout.EndHorizontal(); }
public override void OnInspectorGUI() { serializedObject.Update(); SeparationLine.Horizontal(); EditorGUILayout.LabelField(target.name, K10GuiStyles.bigBoldCenterStyle, GUILayout.Height(28)); SeparationLine.Horizontal(); EditorGUILayout.PropertyField(_alsoLogToConsole); SeparationLine.Horizontal(); EditorGUILayout.LabelField("Custom log", K10GuiStyles.boldCenterStyle, GUILayout.Height(28)); EditorGUILayout.BeginHorizontal(); GUILayout.TextField(SystemInfo.deviceName); GUILayout.TextField(System.DateTime.Now.ToStringOrNull()); EditorGUILayout.EndHorizontal(); textToAdd = GUILayout.TextArea(textToAdd); if (GUILayout.Button("Add Custom Log")) { var log = (EditorLog)target; log.Add(textToAdd); } SeparationLine.Horizontal(); for (int i = _log.arraySize - 1; i >= 0; i--) { var line = _log.GetArrayElementAtIndex(i); var dateTime = line.FindPropertyRelative("_dateTime"); var date = System.DateTime.FromFileTimeUtc(dateTime.longValue); var author = line.FindPropertyRelative("_author"); var message = line.FindPropertyRelative("_message").stringValue; EditorGUILayout.BeginHorizontal(); GUILayout.TextField(author.stringValue); GUILayout.TextField(date.ToStringOrNull()); if (IconButton.Layout("minus", '-', "Remove log line", K10GuiStyles.CYAN_TINT_COLOR)) { _log.DeleteArrayElementAtIndex(i); } EditorGUILayout.EndHorizontal(); GUILayout.TextArea(message); } serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { var collection = (BaseHashedSOCollection)target; int size = collection.Count; var count = 0; for (int i = 0; i < size; i++) { var entry = collection.GetElementBase(i); if (entry == null) { continue; } count++; } SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField($"{_title} ({count})", K10GuiStyles.bigBoldCenterStyle, GUILayout.Height(28)); if (IconButton.Layout("log", 32, 'L', "Show modification log", K10GuiStyles.CYAN_TINT_COLOR)) { var asset = collection.Editor_Log; // if( asset != null ) // { // EditorUtility.FocusProjectWindow(); // Selection.activeObject = asset; // } } EditorGUILayout.EndHorizontal(); SeparationLine.Horizontal(); var edit = (IHashedSOCollectionEditor)collection; EditorGUILayout.BeginVertical(); var lastValid = -1; for (int i = 0; i < size; i++) { var entry = collection.GetElementBase(i) as IHashedSO; if (entry == null) { if (lastValid + 1 == i) { GUILayout.Space(5); } continue; } lastValid = i; EditorGUILayout.BeginHorizontal(); var hasConflict = (entry.HashID < 0 || entry.HashID != i); if (hasConflict) { GuiColorManager.New(Color.red); } if (IconButton.Layout("objective", 's')) { Selection.SetActiveObjectWithContext(entry as Object, entry as Object); } EditorGUILayout.LabelField("[" + i.ToString() + "]", GUILayout.Width(30f)); var tryResolve = hasConflict && GUILayout.Button("!!CONFLICT!!"); EditorGUI.BeginDisabledGroup(true); EditorGUILayout.ObjectField(entry as Object, collection.GetElementType(), false); EditorGUI.EndDisabledGroup(); if (hasConflict) { GuiColorManager.Revert(); } EditorGUILayout.EndHorizontal(); if (tryResolve) { edit.TryResolveConflict(i); } } EditorGUILayout.EndVertical(); if (GUILayout.Button("Check Consistency")) { edit.EditorCheckConsistency(); } if (edit.EditorCanChangeIDsToOptimizeSpace && GUILayout.Button("Optimize")) { edit.EditorTryOptimize(); } GuiColorManager.New(Color.red); if (GUILayout.Button("!DANGER! Enforce HashIDs")) { edit.Editor_HACK_EnforceHashIDs(); } GuiColorManager.Revert(); }
public override void OnInspectorGUI() { if (_labelStyle == null) { _labelStyle = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleLeft } } ; if (IconButton.Layout("tool" + (_unityDefault ? "on" : "off"), 16, 'T', "Unity default Transform", Color.yellow)) { _unityDefault = !_unityDefault; } if (_unityDefault) { base.OnInspectorGUI(); return; } Transform t = (Transform)target; Vector3 initialposition = t.localPosition; Vector3 initialeulerAngles = t.localEulerAngles; Vector3 initialscale = t.localScale; Vector3 position = t.localPosition; Vector3 eulerAngles = t.localEulerAngles; Vector3 scale = t.localScale; GUILayoutOption[] opt = new GUILayoutOption[] { /*GUILayout.MinWidth(80.0f),*/ GUILayout.MaxHeight(20.0f) }; if (targets.Length > 1) { GUI.color = Color.Lerp(Color.yellow, Color.white, .8f); } EditorGUILayout.BeginHorizontal(opt); bool resetPos = IconButton.Layout("zero", 16, '0', "Reset position to zero", Color.white); // bool resetPos = GUILayout.Button( "0 ", GUILayout.Width( 18f ) ); position = EditorGUILayout.Vector3Field("", position); // _positionAdvanced = GUILayout.Toggle( _positionAdvanced, "", GUILayout.Width( 20f ) ); if (IconButton.Layout("tool" + (_positionAdvanced ? "on" : "off"), 16, 'T', "Advanced position tools", Color.yellow)) { _positionAdvanced = !_positionAdvanced; } EditorGUILayout.EndHorizontal(); var color = GUI.color; GUI.color = Color.Lerp(Color.blue, color, .9f); bool rndPX = false, rndPY = false, rndPZ = false, drop = false, offset = false; if (_positionAdvanced) { SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(opt); GUILayout.Label("Offset", _labelStyle, GUILayout.Width(40f)); _offsetPos = EditorGUILayout.Vector3Field("", _offsetPos); offset = GUILayout.Button("Move", GUILayout.Width(40f)); EditorGUILayout.EndHorizontal(); SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(opt); GUILayout.Label("Randomize", _labelStyle, GUILayout.Width(70f)); rndPX = GUILayout.Button("X?", GUILayout.Width(25f)); rndPY = GUILayout.Button("Y?", GUILayout.Width(25f)); rndPZ = GUILayout.Button("Z?", GUILayout.Width(25f)); var all = GUILayout.Button("All?", GUILayout.Width(35f)); GUILayout.Space(30); drop = GUILayout.Button("Drop", GUILayout.Width(40f)); if (all) { rndPX = rndPY = rndPZ = true; } EditorGUILayout.EndHorizontal(); // SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("min", GUILayout.Width(30f)); _minPos = EditorGUILayout.Vector3Field("", _minPos); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("max", GUILayout.Width(30f)); _maxPos = EditorGUILayout.Vector3Field("", _maxPos); // EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal(); SeparationLine.Horizontal(); } GUI.color = color; EditorGUILayout.BeginHorizontal(opt); bool resetRot = IconButton.Layout("zero", 16, '0', "Reset rotation to zero", Color.white); // bool resetRot = GUILayout.Button( "0 ", GUILayout.Width( 18f ) ); eulerAngles = EditorGUILayout.Vector3Field("", eulerAngles); // _rotationAdvanced = GUILayout.Toggle( _rotationAdvanced, "", GUILayout.Width( 20f ) ); if (IconButton.Layout("tool" + (_rotationAdvanced ? "on" : "off"), 16, 'T', "Advanced rotation tools", Color.yellow)) { _rotationAdvanced = !_rotationAdvanced; } EditorGUILayout.EndHorizontal(); color = GUI.color; GUI.color = Color.Lerp(Color.blue, color, .9f); bool rndRX = false, rndRY = false, rndRZ = false; bool faceCenter = false; bool awayCenter = false; if (_rotationAdvanced) { SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(opt); EditorGUILayout.BeginVertical(); GUILayout.Label("Randomize", GUILayout.Width(70f)); EditorGUILayout.EndVertical(); rndRX = GUILayout.Button("X?", GUILayout.Width(25f)); rndRY = GUILayout.Button("Y?", GUILayout.Width(25f)); rndRZ = GUILayout.Button("Z?", GUILayout.Width(25f)); var all = GUILayout.Button("All?", GUILayout.Width(35f)); faceCenter = GUILayout.Button("Face?", GUILayout.Width(45f)); awayCenter = GUILayout.Button("Away?", GUILayout.Width(50f)); if (all) { rndRX = rndRY = rndRZ = true; } EditorGUILayout.EndHorizontal(); // SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("min", GUILayout.Width(30f)); _minRot = EditorGUILayout.Vector3Field("", _minRot); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("max", GUILayout.Width(30f)); _maxRot = EditorGUILayout.Vector3Field("", _maxRot); EditorGUILayout.EndHorizontal(); SeparationLine.Horizontal(); } GUI.color = color; EditorGUILayout.BeginHorizontal(opt); bool resetScl = IconButton.Layout("one", 16, '1', "Reset scale to one", Color.white); // bool resetScl = GUILayout.Button( "1 ", GUILayout.Width( 18f ) ); scale = EditorGUILayout.Vector3Field("", scale); // _scaleAdvanced = GUILayout.Toggle( _scaleAdvanced, "", GUILayout.Width( 20f ) ); if (IconButton.Layout("tool" + (_scaleAdvanced ? "on" : "off"), 16, 'T', "Advanced scale tools", Color.yellow)) { _scaleAdvanced = !_scaleAdvanced; } EditorGUILayout.EndHorizontal(); color = GUI.color; GUI.color = Color.Lerp(Color.blue, color, .9f); bool rndSX = false, rndSY = false, rndSZ = false, bakeScl = false; if (_scaleAdvanced) { SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(opt); //GUILayout.Space( 45f ); GUILayout.Label("Randomize", GUILayout.Width(70f)); rndSX = GUILayout.Button("X?", GUILayout.Width(25f)); rndSY = GUILayout.Button("Y?", GUILayout.Width(25f)); rndSZ = GUILayout.Button("Z?", GUILayout.Width(25f)); var all = GUILayout.Button("All?", GUILayout.Width(35f)); if (all) { rndSX = rndSY = rndSZ = true; } _sameRangeValue = GUILayout.Toggle(_sameRangeValue, "Same", GUILayout.Width(50f)); bakeScl = GUILayout.Button("Bake", GUILayout.Width(45f)); EditorGUILayout.EndHorizontal(); // SeparationLine.Horizontal(); if (_sameRangeValue) { var w = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 30; _minBaseScl = EditorGUILayout.FloatField("min", _minBaseScl); _maxBaseScl = EditorGUILayout.FloatField("max", _maxBaseScl); EditorGUIUtility.labelWidth = w; } else { EditorGUILayout.BeginHorizontal(); GUILayout.Label("min", GUILayout.Width(30f)); _minScl = EditorGUILayout.Vector3Field("", _minScl); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("max", GUILayout.Width(30f)); _maxScl = EditorGUILayout.Vector3Field("", _maxScl); EditorGUILayout.EndHorizontal(); } SeparationLine.Horizontal(); } GUI.color = color; if (GUI.changed) { foreach (Transform trans in serializedObject.targetObjects) { var so = new SerializedObject(trans); //var current = (Transform)currentTarget; so.Update(); SerializedProperty posProp = so.FindProperty("m_LocalPosition"); SerializedProperty rotProp = so.FindProperty("m_LocalRotation"); SerializedProperty sclProp = so.FindProperty("m_LocalScale"); //Undo.RegisterUndo( current, "Transform Change" ); var localPosition = posProp.vector3Value; if (!Mathf.Approximately(initialposition.x, position.x)) { localPosition.x = position.x; } if (!Mathf.Approximately(initialposition.y, position.y)) { localPosition.y = position.y; } if (!Mathf.Approximately(initialposition.z, position.z)) { localPosition.z = position.z; } var localEulerAngles = rotProp.quaternionValue.eulerAngles; if (!Mathf.Approximately(initialeulerAngles.x, eulerAngles.x)) { localEulerAngles.x = eulerAngles.x; } if (!Mathf.Approximately(initialeulerAngles.y, eulerAngles.y)) { localEulerAngles.y = eulerAngles.y; } if (!Mathf.Approximately(initialeulerAngles.z, eulerAngles.z)) { localEulerAngles.z = eulerAngles.z; } var localScale = sclProp.vector3Value; if (!Mathf.Approximately(initialscale.x, scale.x)) { localScale.x = scale.x; } if (!Mathf.Approximately(initialscale.y, scale.y)) { localScale.y = scale.y; } if (!Mathf.Approximately(initialscale.z, scale.z)) { localScale.z = scale.z; } if (resetPos) { localPosition = Vector3.zero; } if (rndPX) { localPosition.x = Random.Range(_minPos.x, _maxPos.x); } if (rndPY) { localPosition.y = Random.Range(_minPos.y, _maxPos.y); } if (rndPZ) { localPosition.z = Random.Range(_minPos.z, _maxPos.z); } if (offset) { localPosition += _offsetPos; } if (resetRot) { localEulerAngles = Vector3.zero; } if (faceCenter) { var pos = trans.position; localEulerAngles.y = Mathf.Atan2(pos.x, pos.z) * Mathf.Rad2Deg - (trans.parent != null ? trans.parent.eulerAngles.y : 0); } if (awayCenter) { var pos = trans.position; localEulerAngles.y = Mathf.Atan2(pos.x, pos.z) * Mathf.Rad2Deg - 180 - (trans.parent != null ? trans.parent.eulerAngles.y : 0); } if (rndRX) { localEulerAngles.x = Random.Range(_minRot.x, _maxRot.x); } if (rndRY) { localEulerAngles.y = Random.Range(_minRot.y, _maxRot.y); } if (rndRZ) { localEulerAngles.z = Random.Range(_minRot.z, _maxRot.z); } var baseScale = Random.Range(_minBaseScl, _maxBaseScl); if (resetScl) { localScale = Vector3.one; } if (rndSX) { localScale.x = _sameRangeValue ? baseScale : Random.Range(_minScl.x, _maxScl.x); } if (rndSY) { localScale.y = _sameRangeValue ? baseScale : Random.Range(_minScl.y, _maxScl.y); } if (rndSZ) { localScale.z = _sameRangeValue ? baseScale : Random.Range(_minScl.z, _maxScl.z); } if (drop) { Vector3 pPos = (trans.parent != null) ? trans.parent.position : Vector3.zero; var pos = trans.position; RaycastHit hit; if (Physics.Raycast(pos, Vector3.down, out hit, float.MaxValue)) { pos = hit.point - pPos; localPosition = pos; } } posProp.vector3Value = FixIfNaN(localPosition); rotProp.quaternionValue = Quaternion.Euler(FixIfNaN(localEulerAngles)); sclProp.vector3Value = FixIfNaN(localScale); if (bakeScl) { BakeScale(so); } so.ApplyModifiedProperties(); } } }