版本: Unity 6 (6000.0)
语言英语
  • C#

EditorToolContext

UnityEditor.EditorTools 中的类

/

继承自: ScriptableObject

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每一项更改建议,并在适当情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请 <a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

描述

使用此类来实现内置变换工具的专门版本。内置变换工具包括移动、旋转、缩放、矩形和变换。

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

属性

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

公共方法

GetAdditionalToolTypes获取要与内置变换工具显示在同一类别中的其他工具集合。
OnActivated在该 EditorToolContext 成为活动工具上下文后调用。
OnToolGUI为该上下文可用的操纵工具集实现任何通用功能。
OnWillBeDeactivated在该 EditorToolContext 停止成为活动工具上下文之前调用。
PopulateMenu将菜单项添加到场景视图上下文菜单。
ResolveTool返回给定上下文中指定工具的匹配 EditorTool 类型。

受保护方法

GetEditorToolType定义给定工具的 EditorTool 类型。

继承的成员

属性

hideFlags对象是否应隐藏、与场景一起保存或用户可修改?
name对象的名称。

公共方法

GetInstanceID获取对象的实例 ID。
ToString返回对象的名称。

静态方法

Destroy删除游戏对象、组件或资源。
DestroyImmediate立即销毁对象 obj。强烈建议使用 Destroy 代替。
DontDestroyOnLoad在加载新场景时不要销毁目标对象。
FindAnyObjectByType检索 Type 类型的任何活动已加载对象。
FindFirstObjectByType检索 Type 类型的第一个活动已加载对象。
FindObjectsByType检索 Type 类型的所有已加载对象的列表。
Instantiate克隆对象 original 并返回克隆。
InstantiateAsync捕获原始对象(必须与某个游戏对象相关)的快照,并返回 AsyncInstantiateOperation。
CreateInstance创建可脚本化对象的实例。

运算符

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

消息

Awake在创建可脚本化对象的实例时调用。
OnDestroy当可脚本化对象将被销毁时,调用此函数。
OnDisable当可脚本化对象超出范围时,调用此函数。
OnEnable当对象加载时,调用此函数。
OnValidate仅编辑器函数,Unity 在加载脚本或 Inspector 中的值发生变化时调用。
Reset重置为默认值。