Use this class to implement specialized versions of the built-in transform tools. Built-in transform tools include Move, Rotate, Scale, Rect, and Transform.
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; } } } }
GetAdditionalToolTypes | Get an additional collection of tools to display in the same category as the built-in transform tools. |
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. |
GetEditorToolType | Defines the EditorTool type for a given Tool. |
GetInstanceID | Gets the instance ID of the object. |
ToString | 返回对象的名称。 |
Destroy | 移除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
FindAnyObjectByType | Retrieves any active loaded object of Type type. |
FindFirstObjectByType | Retrieves the first active loaded object of Type type. |
FindObjectsByType | Retrieves a list of all loaded objects of Type type. |
Instantiate | 克隆 original 对象并返回克隆对象。 |
CreateInstance | 创建脚本化对象的实例。 |
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |