Unity 编辑器多重编辑 Multi-Object Editing

从Unity3.5开始,你可以在检视面板中同时选择和编辑多个类型相同的对象。任何修改过的属性都会被应用到选中的对象上。如果你想在许多对象上做相同的改变这会节约大量的时间。

在选择多个对象时,在检视面板上只有那些在所有被选中的对象上出现的组件才会被显示出来。如果组件只存在与某些被选中对象上,那么在检视面板底部出现一个小的提示,指示那些仅仅在部分被选中对象中存在的组件不能被多重编辑。

Property Values 属性值

当多个对象被选中后,在检视面板上显示的每个属性都代表每个被选中对象的属性。如果所有对象上的属性值都相同,那么这个值会被正常显示,就好像在编辑单个对象一样。但如果属性值在被选中对象上不都相同,那么没有值被显示而是用短划线之类取代显示来说明这些值是不同的。

Unity 编辑器多重编辑 Multi-Object Editing_第1张图片

Multi-edit of two objects

无论是值还是短划线被显示,这个属性值通常都能够被编辑同时被改变的值都会被应用到所有被选中的对象上。如果这些属性值不同从而被显示为短划线,任然可以在属性标签上右击。从而弹出一个菜单让你悬着从哪个对象上继承属性值。

Unity 编辑器多重编辑 Multi-Object Editing_第2张图片

选择从哪个对象上获取值

Multi-Editing Prefab or Model Instances 多重编辑预设件或模型实例

在场景中预设件能够像游戏对象一样被多重编辑。预设或模型的实例也能够被多重编辑。然而也存在某些限制:当编辑单个预设件或模型的实例时,任何与预设件或模型不同的属性都会以粗体显示,右击鼠标会有一个用来从预设或模型中恢复属性值的选项。此外,游戏对象有选项可以用来应用或恢复所有的更改。当进行多重编辑时,一下这些都是不可用的。属性不能被恢复或应用;和预设或模型不同的属性不会以粗体显示。需要提醒您的是,检视面板会提示实例管理失效然后选择,恢复和应用按钮会出现。

Unity 编辑器多重编辑 Multi-Object Editing_第3张图片

Instance Managment Disabled for multi-edit of prefabs 对于多重编辑的预设件实例管理失效

Non-Supported Objects 不被支持的对象

少数对象类型不支持多重编辑。当你同时选择多个对象时,立马会显示一个小提示告知"多重对象编辑不被支持"。

如果你使用自己的编辑器来编辑你自己的脚本。如果它不能支持多重编辑的话也会显示这个消息。参考脚本手册里的 编辑器类 了解如何在你自己的编辑器中实现多重对象编辑的支持。

自定义多重编辑的Inspector面板

对于单个物体,我们可以进行Inspector面板的自定义,比如:加一个按钮,加一个Lable等,那么如果一个自定义的按钮,想要实现的某个功能同事对多个物体进行生效怎么办呢?我们使用对比的方式,希望大家能看的明白。
单个物体的Inspector自定义编辑

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(SpawnBox))]
public class SingleInspector : Editor
{
    public override void OnInspectorGUI()
    {
        base.DrawDefaultInspector();

        SpawnBox _box = target as SpawnBox;
        _box.direction = Direction.Up;

        EditorUtility.SetDirty(target);
    }
}


多个物体的Inspector自定义编辑:
1.[CanEditMultipleObjects]属性
2.可以直接获取targets,代表用户选中的多个物体。
using UnityEngine;
using UnityEditor;

[CanEditMultipleObjects]
[CustomEditor(typeof(SpawnBox))]
public class MultipleInspector : Editor
{
    public override void OnInspectorGUI()
    {
        base.DrawDefaultInspector();

        foreach (Object obj in targets)
        {
            SpawnBox _box = obj as SpawnBox;
            _box.direction = Direction.Up;

            EditorUtility.SetDirty(obj);
        }
    }
}


你可能感兴趣的:(Unity)