Beautify addon
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace EdgeFusion {
|
||||
|
||||
[CustomEditor(typeof(EdgeFusionObject))]
|
||||
public class EdgeFusionObjectEditor : Editor {
|
||||
SerializedProperty overrideRadius;
|
||||
SerializedProperty customRadius;
|
||||
SerializedProperty overrideObjectId;
|
||||
SerializedProperty customObjectId;
|
||||
SerializedProperty useRandomId;
|
||||
SerializedProperty randomIdPerChild;
|
||||
SerializedProperty disallowIntraObjectFusion;
|
||||
SerializedProperty includeMode;
|
||||
SerializedProperty childLayerMask;
|
||||
|
||||
void OnEnable () {
|
||||
overrideRadius = serializedObject.FindProperty("overrideRadius");
|
||||
customRadius = serializedObject.FindProperty("customRadius");
|
||||
overrideObjectId = serializedObject.FindProperty("overrideObjectId");
|
||||
customObjectId = serializedObject.FindProperty("customObjectId");
|
||||
useRandomId = serializedObject.FindProperty("useRandomId");
|
||||
randomIdPerChild = serializedObject.FindProperty("randomIdPerChild");
|
||||
disallowIntraObjectFusion = serializedObject.FindProperty("disallowIntraObjectFusion");
|
||||
includeMode = serializedObject.FindProperty("includeMode");
|
||||
childLayerMask = serializedObject.FindProperty("childLayerMask");
|
||||
EdgeFusionObject edgeFusionObject = (EdgeFusionObject)target;
|
||||
edgeFusionObject.Refresh();
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI () {
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Optional Override", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.PropertyField(overrideObjectId, new GUIContent("Override Object ID"));
|
||||
if (overrideObjectId.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(useRandomId, new GUIContent("Use Random ID", "Use a random Object ID, instead of an Id derived from object position"));
|
||||
if (useRandomId.boolValue && includeMode.intValue == (int)IncludeMode.IncludeChildren) {
|
||||
EditorGUILayout.PropertyField(randomIdPerChild, new GUIContent("Random Id Per Child", "Assign a different random ID to each child renderer"));
|
||||
}
|
||||
if (!useRandomId.boolValue) {
|
||||
EditorGUILayout.PropertyField(customObjectId, new GUIContent("Custom Object ID", "0 = auto. >0 overrides the auto-generated ID. Objects sharing the same ID are considered the same for inter-object detection."));
|
||||
if (customObjectId.intValue <= 0) {
|
||||
EditorGUILayout.HelpBox("Custom Object ID must be greater than 0.", MessageType.Warning);
|
||||
}
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(overrideRadius, new GUIContent("Override Radius"));
|
||||
if (overrideRadius.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(customRadius, new GUIContent("Custom Radius", "Custom blend radius in meters (0 = disables blending for this object)"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(disallowIntraObjectFusion, new GUIContent("Disallow Intra-Object Fusion", "Disable intra-object fusion for this object/children while keeping inter-object fusion."));
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("Inclusion", EditorStyles.boldLabel);
|
||||
EditorGUILayout.PropertyField(includeMode, new GUIContent("Include Mode"));
|
||||
|
||||
if (includeMode.intValue == (int)IncludeMode.IncludeChildren) {
|
||||
EditorGUILayout.PropertyField(childLayerMask, new GUIContent("Child Layer Mask"));
|
||||
}
|
||||
|
||||
if (!serializedObject.isEditingMultipleObjects) {
|
||||
EdgeFusionObject edgeFusionObject = (EdgeFusionObject)target;
|
||||
Material invalidMaterial = edgeFusionObject.nonInstancingMaterial;
|
||||
if (invalidMaterial != null) {
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.HelpBox($"Material '{invalidMaterial.name}' does not support GPU instancing.", MessageType.Warning);
|
||||
if (GUILayout.Button("Select Material", EditorStyles.linkLabel)) {
|
||||
Selection.activeObject = invalidMaterial;
|
||||
EditorGUIUtility.PingObject(invalidMaterial);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < targets.Length; i++) {
|
||||
EdgeFusionObject edgeFusionObject = (EdgeFusionObject)targets[i];
|
||||
if (edgeFusionObject.nonInstancingMaterial != null) {
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.HelpBox("Some selected objects use materials that do not support GPU instancing.", MessageType.Warning);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user