gpt4 book ai didi

unity3d - Editor.target 与 Editor.serializedObject

转载 作者:行者123 更新时间:2023-12-03 22:09:56 24 4
gpt4 key购买 nike

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

using UnityEngine;

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

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

我使用的这个 CustomEditor Editor.serializedObject :
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的目的是什么?然后?

最佳答案

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

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

If this approach is used a user can select multiple assets in the hierarchy window and change the values for all of them at once.



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

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

Instead of modifying script variables directly, it's advantageous to use the SerializedObject and SerializedProperty system to edit them, since this automatically handles multi-object editing, undo, and Prefab overrides.



这归结为,如果您不想为您自动处理撤消、预制覆盖和多对象编辑功能,只需使用 Editor.targetEditor.targets .如果您确实希望这些功能自动运行,请使用 SerializedObjectSerializedProperty .

关于unity3d - Editor.target 与 Editor.serializedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55027410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com