Здесь Я нашел этот фрагмент кода:
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
массив?