Version: 2023.2

EditorToolContext

class in UnityEditor.EditorTools

/

继承自:ScriptableObject

切换到手册

描述

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 &amp;&amp; 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;
            }
        }
    }
}

变量

target所检查的对象。
targets正在检查的对象的数组。

公共函数

GetAdditionalToolTypesGet an additional collection of tools to display in the same category as the built-in transform tools.
OnActivatedInvoked after this EditorToolContext becomes the active tool context.
OnToolGUIImplements any common functionality for the set of manipulation tools available for this context.
OnWillBeDeactivatedInvoked before this EditorToolContext stops being the active tool context.
PopulateMenuAdds menu items to the Scene view context menu.
ResolveToolReturns the matching EditorTool type for the specified Tool given the context.

受保护的函数

GetEditorToolTypeDefines the EditorTool type for a given Tool.

继承的成员

变量

hideFlags该对象应该隐藏、随场景一起保存还是由用户修改?
name对象的名称。

公共函数

GetInstanceIDGets the instance ID of the object.
ToString返回对象的名称。

静态函数

Destroy移除 GameObject、组件或资源。
DestroyImmediate立即销毁对象 /obj/。强烈建议您改用 Destroy。
DontDestroyOnLoad在加载新的 Scene 时,请勿销毁 Object。
FindAnyObjectByTypeRetrieves any active loaded object of Type type.
FindFirstObjectByTypeRetrieves the first active loaded object of Type type.
FindObjectsByTypeRetrieves a list of all loaded objects of Type type.
Instantiate克隆 original 对象并返回克隆对象。
CreateInstance创建脚本化对象的实例。

运算符

bool该对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用,判断它们是否引用同一个对象。

消息

Awake当 ScriptableObject 脚本启动时调用此函数。
OnDestroy当脚本化对象将销毁时调用此函数。
OnDisable当脚本化对象超出范围时调用此函数。
OnEnable当对象加载时调用此函数。
OnValidateEditor-only function that Unity calls when the script is loaded or a value changes in the Inspector.
Reset重置为默认值。