Назначение SerializedObject - PullRequest
0 голосов
/ 06 марта 2019

Здесь Я нашел этот фрагмент кода:

using System.Linq;
using UnityEditor;
using UnityEngine;

static class Example2
{
    [MenuItem("Edit/Reset Selected Objects Position")]
    static void ResetPosition()
    {
        var transforms = Selection.gameObjects.Select(go => go.transform).ToArray();
        var so = new SerializedObject(transforms);
        // you can Shift+Right Click on property names in the Inspector to see their paths
        so.FindProperty("m_LocalPosition").vector3Value = Vector3.zero;
        so.ApplyModifiedProperties();
    }
}

Документы говорят, что: "Следующий пример скрипта имеет тот же эффект, что ипредыдущий, но также не подлежит отмене и отслеживается как изменение в сцене. ".Я полагаю, это потому, что система отмены использует сериализацию, и для того, чтобы она работала, нам нужно сериализовать наши преобразования, но зачем нам это нужно?

Здесь документы говорят, что: "Когда поля ссылаются на класс UnityEngine.Object-derived, такой как общедоступная камера myCamera, Unity сериализует фактическую ссылку на камеру UnityEngine.Object." .компоненты преобразования действительно происходят из UnityEngine.Object, поэтому они все равно должны быть сериализованы, верно?

ps Я не могу найти никакой информации о том, как работать с этой FindProperty функцией.Я имею в виду, откуда взялся m_LocalPosition?Есть ли какая-нибудь таблица, которая показывает, как получить доступ к GameObjects свойствам, когда мы работаем с ними как SerializedObject массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...