Unity 6.3
0 онлайн 21 гостей 3 в системе
Вход

ObjectChangeKind

перечисление

Описание

Это перечисление описывает различные типы изменений, которые могут отслеживаться в ObjectChangeEventStream. Каждое событие имеет соответствующий тип в ObjectChangeEvents.

using UnityEditor;
using UnityEngine;

[InitializeOnLoad] public class ObjectChangeEventsExample { static ObjectChangeEventsExample() { ObjectChangeEvents.changesPublished += ChangesPublished; }

static void ChangesPublished(ref ObjectChangeEventStream stream) { for (int i = 0; i < stream.length; ++i) { var type = stream.GetEventType(i); switch (type) { case ObjectChangeKind.ChangeScene: stream.GetChangeSceneEvent(i, out var changeSceneEvent); Debug.Log($"{type}: {changeSceneEvent.scene}"); break;

case ObjectChangeKind.CreateGameObjectHierarchy: stream.GetCreateGameObjectHierarchyEvent(i, out var createGameObjectHierarchyEvent); var newGameObject = EditorUtility.InstanceIDToObject(createGameObjectHierarchyEvent.instanceId) as GameObject; Debug.Log($"{type}: {newGameObject} in scene {createGameObjectHierarchyEvent.scene}."); break;

case ObjectChangeKind.ChangeGameObjectStructureHierarchy: stream.GetChangeGameObjectStructureHierarchyEvent(i, out var changeGameObjectStructureHierarchy); var gameObject = EditorUtility.InstanceIDToObject(changeGameObjectStructureHierarchy.instanceId) as GameObject; Debug.Log($"{type}: {gameObject} in scene {changeGameObjectStructureHierarchy.scene}."); break;

case ObjectChangeKind.ChangeGameObjectStructure: stream.GetChangeGameObjectStructureEvent(i, out var changeGameObjectStructure); var gameObjectStructure = EditorUtility.InstanceIDToObject(changeGameObjectStructure.instanceId) as GameObject; Debug.Log($"{type}: {gameObjectStructure} in scene {changeGameObjectStructure.scene}."); break;

case ObjectChangeKind.ChangeGameObjectParent: stream.GetChangeGameObjectParentEvent(i, out var changeGameObjectParent); var gameObjectChanged = EditorUtility.InstanceIDToObject(changeGameObjectParent.instanceId) as GameObject; var newParentGo = EditorUtility.InstanceIDToObject(changeGameObjectParent.newParentInstanceId) as GameObject; var previousParentGo = EditorUtility.InstanceIDToObject(changeGameObjectParent.previousParentInstanceId) as GameObject; Debug.Log($"{type}: {gameObjectChanged} from {previousParentGo} to {newParentGo} from scene {changeGameObjectParent.previousScene} to scene {changeGameObjectParent.newScene}."); break;

case ObjectChangeKind.ChangeGameObjectOrComponentProperties: stream.GetChangeGameObjectOrComponentPropertiesEvent(i, out var changeGameObjectOrComponent); var goOrComponent = EditorUtility.InstanceIDToObject(changeGameObjectOrComponent.instanceId); if (goOrComponent is GameObject go) { Debug.Log($"{type}: GameObject {go} change properties in scene {changeGameObjectOrComponent.scene}."); } else if (goOrComponent is Component component) { Debug.Log($"{type}: Component {component} change properties in scene {changeGameObjectOrComponent.scene}."); } break;

case ObjectChangeKind.DestroyGameObjectHierarchy: stream.GetDestroyGameObjectHierarchyEvent(i, out var destroyGameObjectHierarchyEvent); // The destroyed GameObject can not be converted with EditorUtility.InstanceIDToObject as it has already been destroyed. var destroyParentGo = EditorUtility.InstanceIDToObject(destroyGameObjectHierarchyEvent.parentInstanceId) as GameObject; Debug.Log($"{type}: {destroyGameObjectHierarchyEvent.instanceId} with parent {destroyParentGo} in scene {destroyGameObjectHierarchyEvent.scene}."); break;

case ObjectChangeKind.CreateAssetObject: stream.GetCreateAssetObjectEvent(i, out var createAssetObjectEvent); var createdAsset = EditorUtility.InstanceIDToObject(createAssetObjectEvent.instanceId); var createdAssetPath = AssetDatabase.GUIDToAssetPath(createAssetObjectEvent.guid); Debug.Log($"{type}: {createdAsset} at {createdAssetPath} in scene {createAssetObjectEvent.scene}."); break;

case ObjectChangeKind.DestroyAssetObject: stream.GetDestroyAssetObjectEvent(i, out var destroyAssetObjectEvent); // The destroyed asset can not be converted with EditorUtility.InstanceIDToObject as it has already been destroyed. Debug.Log($"{type}: Instance Id {destroyAssetObjectEvent.instanceId} with Guid {destroyAssetObjectEvent.guid} in scene {destroyAssetObjectEvent.scene}."); break;

case ObjectChangeKind.ChangeAssetObjectProperties: stream.GetChangeAssetObjectPropertiesEvent(i, out var changeAssetObjectPropertiesEvent); var changeAsset = EditorUtility.InstanceIDToObject(changeAssetObjectPropertiesEvent.instanceId); var changeAssetPath = AssetDatabase.GUIDToAssetPath(changeAssetObjectPropertiesEvent.guid); Debug.Log($"{type}: {changeAsset} at {changeAssetPath} in scene {changeAssetObjectPropertiesEvent.scene}."); break;

case ObjectChangeKind.UpdatePrefabInstances: stream.GetUpdatePrefabInstancesEvent(i, out var updatePrefabInstancesEvent); string s = ""; s += $"{type}: scene {updatePrefabInstancesEvent.scene}. Instances ({updatePrefabInstancesEvent.instanceIds.Length}):\n"; foreach (var prefabId in updatePrefabInstancesEvent.instanceIds) { s += EditorUtility.InstanceIDToObject(prefabId).ToString() + "\n"; } Debug.Log(s); break; } } } }

Свойства

Свойство Описание
NoneУказывает неинициализованное значение.
ChangeSceneИзменение этого типа указывает, что открытая сцена была изменена ("загрязнена") без какой-либо конкретной информации. Это происходит, например, когда используется EditorSceneManager.MarkSceneDirty.
CreateGameObjectHierarchyИзменение этого типа указывает на то, что был создан GameObject, возможно с дополнительными объектами ниже него в иерархии. Это происходит, например, когда Undo.RegisterCreatedObjectUndo используется с GameObject.
ChangeGameObjectStructureHierarchyИзменение этого типа указывает на то, что структура GameObject изменилась и что любая GameObject в иерархии ниже неё может измениться. Это происходит, например, когда используется Undo.RegisterFullObjectHierarchyUndo.
ChangeGameObjectStructureИзменение этого типа указывает на изменение структуры GameObject. Это происходит, когда компонент добавляется или удаляется из GameObject с помощью Undo.AddComponent или Undo.DestroyObjectImmediate.
ChangeGameObjectParentИзменение этого типа указывает, что родитель GameObject изменился. Это происходит, когда используются Undo.SetTransformParent или SceneManager.MoveGameObjectToScene.
ChangeGameObjectOrComponentPropertiesИзменение этого типа указывает на то, что изменилось свойство GameObject или Компонента. Это происходит, например, когда Undo.RecordObject используется с экземпляром Компонента.
DestroyGameObjectHierarchyИзменение такого типа указывает на то, что GameObject и вся иерархия под ним были уничтожены. Это происходит, например, когда Undo.DestroyObjectImmediate используется с GameObject.
CreateAssetObjectИзменение этого типа указывает на то, что объект asset был создан. Это происходит, например, когда Undo.RegisterCreatedObjectUndo используется с экземпляром asset (e.g. Texture). Обратите внимание, что это касается только создания объектов asset в памяти, а не создания новых asset в проекте на диске.
DestroyAssetObjectИзменение этого типа указывает на то, что объект asset был уничтожен. Это происходит, например, когда Undo.DestroyObjectImmediate используется с экземпляром asset (e.g. Texture). Обратите внимание, что это касается только уничтожения объектов asset в памяти, а не удаления asset в проекте на диске.
ChangeAssetObjectPropertiesИзменение этого типа указывает на изменение свойства объекта ассета в памяти. Это происходит, например, когда Undo.RecordObject используется с экземпляром ассета (e.g. Текстура). Обратите внимание, что это касается только изменений объектов ассета в памяти, а не изменений ассетов в проекте на диске.
UpdatePrefabInstancesИзменение этого типа указывает, что экземпляры префаб в открытой сцене были обновлены из-за изменения в источнике префаб.
ChangeChildrenOrderИзменение этого типа указывает на то, что дочерняя функция была переупорядочена в иерархии под тем же родителем. Это происходит при вызове Undo.RegisterChildrenOrderUndo или при переупорядочении дочерней функции в иерархии под тем же родителем.
ChangeRootOrderИзменение этого типа указывает на то, что GameObject, расположенный в корне сцены, был переупорядочен в иерархии. Это происходит при вызове Undo.SetSiblingIndex или при переупорядочении такого GameObject в иерархии под той же сценой.