Version: 2020.3

EditorToolAttribute

class in UnityEditor.EditorTools

切换到手册

描述

EditorTool 注册为全局工具或用于特定目标类型的 CustomEditor

全局工具适用于任何选定内容。始终可从顶部的工具栏中使用全局工具。CustomEditor 工具仅可用于与目标类型匹配的选定内容。

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在菜单中显示的名称。
targetType此工具可以编辑的目标类型。

构造函数

EditorToolAttribute将 EditorTool 注册为全局工具或 CustomEditor 工具。