EditorToolContext
Use this class to implement specialized versions of the built-in transform tools. Built-in transform tools include Move, Rotate, Scale, Rect, and Transform.
Read time 6 minutesLast updated 4 days ago
Definition
- Type: Class
- Namespace: UnityEditor.EditorTools
- Assembly: UnityEditor
- Inherits from: ScriptableObject
public abstract class EditorToolContext : ScriptableObject
Examples
using System;using System.Collections.Generic;using UnityEditor;using UnityEditor.EditorTools;using UnityEngine;// EditorToolContextAttribute is what registers a context with the UI.[EditorToolContext("Wobbly Transform Tools")]// The icon path can also be used with packages. Ex "Packages/com.wobblestudio.wobblytools/Icons/Transform.png".[Icon("Assets/Examples/Icons/TransformIcon.png")]public class WobbleContext : EditorToolContext{ // Tool contexts can also implement an OnToolGUI function that is invoked before tools. This is a good place to // add any custom selection logic, for example. public override void OnToolGUI(EditorWindow _) { } protected override Type GetEditorToolType(Tool tool) { switch (tool) { // Return the type of tool to be used for Tool.Move. The Tool Manager will handle instantiating and // activating the tool. case Tool.Move: return typeof(WobblyMoveTool); // For any tools that are not implemented, return null to disable the tool in the menu. default: return null; } }}// Note that tools used by an EditorToolContext do not need to use EditorToolAttribute.class WobblyMoveTool : EditorTool{ struct Selected { public Transform transform; public Vector3 localScale; } Vector3 m_Origin; List<Selected> m_Selected = new List<Selected>(); void StartMove(Vector3 origin) { m_Origin = origin; m_Selected.Clear(); foreach(var trs in Selection.transforms) m_Selected.Add(new Selected() { transform = trs, localScale = trs.localScale }); Undo.RecordObjects(Selection.transforms, "Wobble Move Tool"); } // This is silly example that oscillates the scale of the selected objects as they are moved. public override void OnToolGUI(EditorWindow _) { var evt = Event.current.type; var hot = GUIUtility.hotControl; EditorGUI.BeginChangeCheck(); var p = Handles.PositionHandle(Tools.handlePosition, Tools.handleRotation); if (evt == EventType.MouseDown && hot != GUIUtility.hotControl) StartMove(p); if (EditorGUI.EndChangeCheck()) { foreach (var selected in m_Selected) { selected.transform.position += (p - Tools.handlePosition); var scale = Vector3.one * (Mathf.Sin(Mathf.Abs(Vector3.Distance(m_Origin, p))) * .5f); selected.transform.localScale = selected.localScale + scale; } } }}
Properties
Methods
Method | Description |
|---|---|
| GetAdditionalToolTypes | Get an additional collection of tools to display in the same category as the built-in transform tools. |
| GetEditorToolType | Defines the EditorTool type for a given Tool. |
| OnActivated | Invoked after this EditorToolContext becomes the active tool context. |
| OnToolGUI | Implements any common functionality for the set of manipulation tools available for this context. |
| OnWillBeDeactivated | Invoked before this EditorToolContext stops being the active tool context. |
| PopulateMenu | Adds menu items to the Scene view context menu. |
| ResolveTool | Returns the matching EditorTool type for the specified Tool given the context. |
Inheritance
Operators
Operator | Description |
|---|---|
| operator == | Compares two object references to see if they refer to the same object. |
| bool | Determines whether the object exists. |
| operator != | Compares if two objects refer to a different object. |