You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.6 KiB
C#
138 lines
3.6 KiB
C#
|
3 years ago
|
using UnityEngine;
|
||
|
|
using UnityEditor;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Linq;
|
||
|
|
using UnityEditor.ProBuilder;
|
||
|
|
using UnityEngine.ProBuilder;
|
||
|
|
using EditorUtility = UnityEditor.ProBuilder.EditorUtility;
|
||
|
|
|
||
|
|
namespace ProBuilder.EditorExamples
|
||
|
|
{
|
||
|
|
sealed class EditorCallbackViewer : EditorWindow
|
||
|
|
{
|
||
|
|
List<string> m_Logs = new List<string>();
|
||
|
|
Vector2 m_Scroll = Vector2.zero;
|
||
|
|
bool m_Collapse = true;
|
||
|
|
|
||
|
|
[MenuItem("Tools/ProBuilder/API Examples/Log Callbacks Window")]
|
||
|
|
static void MenuInitEditorCallbackViewer()
|
||
|
|
{
|
||
|
|
GetWindow<EditorCallbackViewer>(true, "ProBuilder Callbacks", true).Show();
|
||
|
|
}
|
||
|
|
|
||
|
|
static Color logBackgroundColor
|
||
|
|
{
|
||
|
|
get { return EditorGUIUtility.isProSkin ? new Color(.15f, .15f, .15f, .5f) : new Color(.8f, .8f, .8f, 1f); }
|
||
|
|
}
|
||
|
|
|
||
|
|
static Color disabledColor
|
||
|
|
{
|
||
|
|
get { return EditorGUIUtility.isProSkin ? new Color(.3f, .3f, .3f, .5f) : new Color(.8f, .8f, .8f, 1f); }
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnEnable()
|
||
|
|
{
|
||
|
|
ProBuilderEditor.selectModeChanged += SelectModeChanged;
|
||
|
|
EditorUtility.meshCreated += MeshCreated;
|
||
|
|
ProBuilderEditor.selectionUpdated += SelectionUpdated;
|
||
|
|
ProBuilderEditor.beforeMeshModification += BeforeMeshModification;
|
||
|
|
ProBuilderEditor.afterMeshModification += AfterMeshModification;
|
||
|
|
EditorMeshUtility.meshOptimized += MeshOptimized;
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnDisable()
|
||
|
|
{
|
||
|
|
ProBuilderEditor.selectModeChanged -= SelectModeChanged;
|
||
|
|
EditorUtility.meshCreated -= MeshCreated;
|
||
|
|
ProBuilderEditor.selectionUpdated -= SelectionUpdated;
|
||
|
|
ProBuilderEditor.beforeMeshModification -= BeforeMeshModification;
|
||
|
|
ProBuilderEditor.afterMeshModification -= AfterMeshModification;
|
||
|
|
EditorMeshUtility.meshOptimized -= MeshOptimized;
|
||
|
|
}
|
||
|
|
|
||
|
|
void BeforeMeshModification(IEnumerable<ProBuilderMesh> selection)
|
||
|
|
{
|
||
|
|
AddLog("Began Moving Vertices");
|
||
|
|
}
|
||
|
|
|
||
|
|
void AfterMeshModification(IEnumerable<ProBuilderMesh> selection)
|
||
|
|
{
|
||
|
|
AddLog("Finished Moving Vertices");
|
||
|
|
}
|
||
|
|
|
||
|
|
void SelectModeChanged(SelectMode mode)
|
||
|
|
{
|
||
|
|
AddLog("Selection Mode Changed: " + mode);
|
||
|
|
}
|
||
|
|
|
||
|
|
void MeshCreated(ProBuilderMesh mesh)
|
||
|
|
{
|
||
|
|
AddLog("Instantiated new ProBuilder Object: " + mesh.name);
|
||
|
|
}
|
||
|
|
|
||
|
|
void SelectionUpdated(IEnumerable<ProBuilderMesh> selection)
|
||
|
|
{
|
||
|
|
AddLog("Selection Updated: " + string.Format("{0} objects selected.", selection != null ? selection.Count() : 0));
|
||
|
|
}
|
||
|
|
|
||
|
|
void MeshOptimized(ProBuilderMesh pmesh, Mesh umesh)
|
||
|
|
{
|
||
|
|
AddLog(string.Format("Mesh {0} rebuilt", pmesh.name));
|
||
|
|
}
|
||
|
|
|
||
|
|
void AddLog(string summary)
|
||
|
|
{
|
||
|
|
m_Logs.Add(summary);
|
||
|
|
Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnGUI()
|
||
|
|
{
|
||
|
|
GUILayout.BeginHorizontal(EditorStyles.toolbar);
|
||
|
|
|
||
|
|
GUILayout.FlexibleSpace();
|
||
|
|
|
||
|
|
GUI.backgroundColor = m_Collapse ? disabledColor : Color.white;
|
||
|
|
if (GUILayout.Button("Collapse", EditorStyles.toolbarButton))
|
||
|
|
m_Collapse = !m_Collapse;
|
||
|
|
GUI.backgroundColor = Color.white;
|
||
|
|
|
||
|
|
if (GUILayout.Button("Clear", EditorStyles.toolbarButton))
|
||
|
|
m_Logs.Clear();
|
||
|
|
|
||
|
|
GUILayout.EndHorizontal();
|
||
|
|
|
||
|
|
GUILayout.BeginHorizontal();
|
||
|
|
GUILayout.Label("Callback Log", EditorStyles.boldLabel);
|
||
|
|
GUILayout.EndHorizontal();
|
||
|
|
|
||
|
|
Rect r = GUILayoutUtility.GetLastRect();
|
||
|
|
r.x = 0;
|
||
|
|
r.y = r.y + r.height + 6;
|
||
|
|
r.width = this.position.width;
|
||
|
|
r.height = this.position.height;
|
||
|
|
|
||
|
|
GUILayout.Space(4);
|
||
|
|
|
||
|
|
m_Scroll = GUILayout.BeginScrollView(m_Scroll);
|
||
|
|
|
||
|
|
int len = m_Logs.Count;
|
||
|
|
int min = System.Math.Max(0, len - 1024);
|
||
|
|
|
||
|
|
for (int i = len - 1; i >= min; i--)
|
||
|
|
{
|
||
|
|
if (m_Collapse &&
|
||
|
|
i > 0 &&
|
||
|
|
i < len - 1 &&
|
||
|
|
m_Logs[i].Equals(m_Logs[i - 1]) &&
|
||
|
|
m_Logs[i].Equals(m_Logs[i + 1]))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
GUILayout.Label(string.Format("{0,3}: {1}", i, m_Logs[i]));
|
||
|
|
}
|
||
|
|
|
||
|
|
GUILayout.EndScrollView();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|