class in UnityEditor.EditorTools
/
Implemented in:UnityEditor
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
CloseFor some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
CloseRegisters an EditorTool as either a global tool or a CustomEditor for a specific target type.
A global tool works on any selection. A global tool is also always available from the top toolbar. A CustomEditor tool is only available for selections that match a target type.
using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEditor; using UnityEditor.EditorTools; using UnityEngine.Rendering;
// By passing `typeof(MeshFilter)` as the second argument, we register VertexTool as a CustomEditor tool to be presented // when the current selection contains a MeshFilter component. [EditorTool("Show Vertices", typeof(MeshFilter))] class VertexTool : EditorTool { struct TransformAndPositions { public Transform transform; public Vector3[] positions; }
IEnumerable<TransformAndPositions> m_Vertices; GUIContent m_ToolbarIcon;
public override GUIContent toolbarIcon { get { if (m_ToolbarIcon == null) m_ToolbarIcon = new GUIContent( AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/Examples/Icons/VertexTool.png"), "Vertex Visualization Tool"); return m_ToolbarIcon; } }
void OnEnable() { EditorTools.activeToolChanged += ActiveToolDidChange; }
void OnDisable() { EditorTools.activeToolChanged -= ActiveToolDidChange; }
void ActiveToolDidChange() { if (!EditorTools.IsActiveTool(this)) return;
m_Vertices = targets.Select(x => { return new TransformAndPositions() { transform = ((MeshFilter)x).transform, positions = ((MeshFilter)x).sharedMesh.vertices }; }).ToArray(); }
public override void OnToolGUI(EditorWindow window) { var evt = Event.current;
if (evt.type == EventType.Repaint) { var zTest = Handles.zTest; Handles.zTest = CompareFunction.LessEqual;
foreach (var entry in m_Vertices) { foreach (var vertex in entry.positions) { var world = entry.transform.TransformPoint(vertex); Handles.DotHandleCap(0, world, Quaternion.identity, HandleUtility.GetHandleSize(world) * .05f, evt.type); } }
Handles.zTest = zTest; } } }
displayName | The name that displays in menus. |
targetType | The target type that this tool can edit. |
EditorToolAttribute | Registers an EditorTool as either a global tool or a CustomEditor tool. |