首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Editor.target对Editor.serializedObject

Editor.target对Editor.serializedObject
EN

Stack Overflow用户
提问于 2019-03-06 16:04:54
回答 1查看 2.3K关注 0票数 4

所以我有一个简单的脚本:

代码语言:javascript
复制
using UnityEngine;

public class MyScript: MonoBehaviour
{
    public int damage = 25;

    public void PrintStuff()
    {
        Debug.Log("Stuff");
    }
}

在这个CustomEditor中,我使用Editor.serializedObject

代码语言:javascript
复制
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(MyScript))]
public class LookAtPointEditor : Editor
{
    SerializedProperty damageProp;

    void OnEnable()
    {
        // Setup the SerializedProperties.
        damageProp = serializedObject.FindProperty("damage");
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        EditorGUILayout.IntSlider(damageProp, 0, 100, new GUIContent("Damage"));

        serializedObject.ApplyModifiedProperties();

    }
}

这很好:撤销工作,退出播放模式工作,但我可以使用Editor.target做同样的事情,而且要简单得多。所有功能都可以在Editor.target中正常工作。那么,serializedObject的目的是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 16:34:23

问得好!Editor API docs解释了这一点,但信息大多是分散的,所以我将总结如下:

首先,有一个您目前不使用的选项CanEditMultipleObjects。文档中的引文:

如果使用这种方法,用户可以在层次结构窗口中选择多个资产,并一次更改所有资产的值。

对于这方面的基本示例,在场景中选择两个GameObjects,它们具有相同的统一组件(如ImageRigidbody),您将能够同时修改这些组件,使其具有相同的值。大多数内置组件都支持它。

这是使用serializedObject的第一个优点;它支持多对象编辑,而Editor.target不支持(为此需要Editor.targets )。现在,如果您想知道,“为什么我不直接使用Editor.targets进行多对象编辑呢?”请考虑引用文档中的以下内容:

与直接修改脚本变量不同,使用SerializedObject和SerializedProperty系统编辑脚本变量是有利的,因为这会自动处理多对象编辑、撤消和Prefab覆盖

归根结底,如果您不希望撤消、预置覆盖和多对象编辑功能自动为您处理,只需使用Editor.targetEditor.targets。如果您确实希望这些特性能够自动工作,请使用SerializedObjectSerializedProperty

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55027410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档