版本:Unity 6 (6000.0)
语言English
  • C#

Undo.RegisterCreatedObjectUndo

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每一项更改建议,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void RegisterCreatedObjectUndo(Object objectToUndo, string name);

参数

objectToUndo 新创建的对象。执行撤消操作时,此对象将被销毁。当值为 GameObject 时,Unity 会注册 GameObject 及其子 GameObject,但不会注册同级或父 GameObject。
name 要撤消的操作名称。使用此字符串提供要撤消的操作的简短描述。对于编辑菜单中的撤消重做项,Unity 会将“撤消”或“重做”添加到您提供的字符串中。例如,如果您提供字符串“创建游戏对象”,则 Unity 编辑器会显示菜单项编辑 > 撤消创建游戏对象

描述

注册撤消创建对象的操作。

此方法将对象的创建注册到撤消堆栈,以便用户可以撤消创建对象的操作。每次定义创建对象的动作时使用此方法,例如,在自定义编辑器或菜单项中。Unity 使用撤消操作的名称更新编辑菜单中的撤消操作。当用户执行撤消操作时,Unity 会销毁该对象。

注意:撤消过程以与Object.Destroy相同的方式销毁对象,但没有延迟。

当您同时创建和修改对象时,请使用以下工作流程以确保Undo.RegisterCreatedObjectUndo保存对对象的所有更新

  1. 创建对象。
  2. 使用Undo.RegisterCreatedObjectUndo注册已创建的对象。
  3. 使用Undo.RegisterCompleteObjectUndo注册对象,以便编辑器记录对对象的更改。如果对象有任何子游戏对象,请改用Undo.RegisterFullObjectHierarchyUndo注册它。
  4. 更新对象。

如果您不遵循此工作流程,Undo.RegisterCreatedObjectUndo可能不会保存对对象的任何更新,除了对象创建之外。

当您使用Undo.RegisterCreatedObjectUndo注册新对象时,Unity 会注册对当前由Undo.RecordObject记录的对象的任何更改,然后停止记录。这意味着在您注册新对象后,Unity 不会记录对Undo.RecordObject之前已在记录的任何其他对象的任何后续更改。

当 Unity 已经使用Undo.RecordObject记录对现有对象的更改,并且您想要注册新创建的对象时,最佳做法是遵循此工作流程

  1. 完成您想要对Undo.RecordObject正在记录的对象进行的任何更改。Unity 会自动调用Undo.FlushUndoRecordObjects
  2. 使用Undo.RegisterCreatedObjectUndo注册新创建的对象。

如果您不遵循此工作流程,Unity 可能无法正确地将记录对象的的状态存储在撤消堆栈上。

以下示例演示如何创建一个具有子对象的游戏对象,并将其修改为可在单个撤消步骤中撤消的操作。

using UnityEditor;
using UnityEngine;

class CreateGameObjectMenu { [MenuItem("Example/Create GameObject")] static void CreateGameObject() { // Create new undo group Undo.IncrementCurrentGroup();

// Create GameObject hierarchy GameObject go = new GameObject("my GameObject"); Undo.RegisterCreatedObjectUndo(go, "Create my GameObject"); GameObject child = new GameObject(); Undo.RegisterCreatedObjectUndo(child, "Create child"); Undo.SetTransformParent(child.transform, go.transform, "Modify parent");

// Move GameObject hierarchy Undo.RegisterFullObjectHierarchyUndo(go, "Update my GameObject position"); go.transform.position = new Vector3(5, 5, 5);

// Name undo group Undo.SetCurrentGroupName("Create and Reposition GameObject with Child"); } }

注意:isProcessingtrue时,无法执行此操作。

© . This site is unofficial and not affiliated with Unity Technologies.