http://wiki.unity3d.com/index.php/Tip_of_the_day
Feb 2013
Tip #53 Undo.IncrementCurrentEventIndex
Undo.IncrementCurrentEventIndexについて
Undo.IncrementCurrentEventIndex を使用することで、Unity が短時間で連続に行なった多くのアクションを取り消すよりも、エディタスクリプトがシングルアクションを取り消すことが出来ます。コードを実行する前に Editor フォルダに配置して下さい。
Create Object ボタンにより 10 個のキューブが作成され、各々についてUndo.RegisterCreatedObjectUndo をコールします。このボタンをクリックして Ctrl + Z を押下して作成された全てオブジェクトを取り消して下さい。
ふたつめのボタン Create Single Object は 10 個のキューブが作成されますが、さらにUndo.IncrementCurrentEventIndex メソッドをコールして作成された各々のオブジェクトが、別の取り消しアクションを持つべきことをUnity に通知します。Create Single Object をクリックして 10 個のキューブ作成して、Ctrl + Z を押下することで各々のオブジェクトの作成を個別に取り消して下さい。
備考:この記載の時点では、Unity ドキュメントには Undo.IncrementCurrentEventIndex に関する記載がなく、結果は 0 件になります。
using UnityEngine;
using UnityEditor;
public class UndoTest : EditorWindow
{
public void OnGUI()
{
if (GUILayout.Button("create object"))
{
this.Create(false);
}
if (GUILayout.Button("create single object"))
{
this.Create(true);
}
GUILayout.Label("use ctrl+z to undo each action");
}
private void Create(bool single)
{
for (int i = 0; i < 10; i++)
{
if (single)
{
Undo.IncrementCurrentEventIndex();
}
var obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.transform.position = new Vector3(Random.Range(-10, 10), Random.Range(-10, 10), Random.Range(-10, 10));
Undo.RegisterCreatedObjectUndo(obj, "create " + obj.name);
}
}
[MenuItem("CBX/UndoTest")]
public static void ShowWindow()
{
GetWindow<UndoTest>("UndoTest").Show();
}
}
--------------うーん、公式ドキュメントにないものは使用継続できるか分からないからなぁー。
それでも便利なTips。知識として積み重ねようぜ!

0 件のコメント:
コメントを投稿