はじめに
Unity エディターにおいて、Undo 操作の登録を簡単に行うことができるようになるツールを公開しました! 🚀
Unity Undo Extensions の使いどころ
Unity での開発では、エディター拡張を書いてメニューにオリジナルの項目を追加したり、Inspector にボタンを置いたりして、特定の操作を効率的に行えるようにするということをよくやると思います。
このとき、これらの拡張から普通に GameObject.AddComponent
のようなメソッドを実行すると、Undo 操作が登録されず、Ctrl + Z などで取り消すことができません。また、オブジェクトが Dirty としてマーク*1されることもないため、Ctrl + S などで保存をすることもできません。
Undo や保存ができるようにするには、 Undo.AddComponent
のような専用のメソッドを実行する必要がありますが、これらは UnityEditor
名前空間内にあるため、ビルドするとエラーになってしまいます。
これらを加味すると、以下のようなコードにすることが考えられます。
// 自身に SpriteRenderer をアタッチする // エディター上かつ非再生時のみ、Undo 版のメソッドを使用する using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif public class ExampleMonoBehaviour : MonoBehaviour { public void ExampleButton() { #if UNITY_EDITOR if (!EditorApplication.isPlaying) { Undo.AddComponent<SpriteRenderer>(gameObject); } #endif gameObject.AddComponent<SpriteRenderer>(); } }
このようにすることで、ビルドエラーを回避しつつ Undo 登録ができるようになります……が、かなりコードが煩雑になってしまい、毎回これを書くのは結構しんどい。
そこで、Unity Undo Extensions の出番です。このパッケージを導入することで、以下のように書くことができるようになります。
using GigaCreation.Tools.UndoExtensions; using UnityEngine; public class ExampleMonoBehaviour : MonoBehaviour { public void ExampleButton() { gameObject.AddComponentAsUndoable<SpriteRenderer>(); } }
AddComponentAsUndoable
を使用することで、一行で書くことができるようになりました!
使い方
現在のバージョン (2.0.0) では、以下の 3 つの拡張メソッドが含まれています。
AddComponentAsUndoable
DestroyAsUndoable
DoActionAsUndoable
それぞれ、以下のように使用します。
using GigaCreation.Tools.UndoExtensions; using UnityEngine; public class ExampleMonoBehaviour : MonoBehaviour { public int Counter; public void Example01() { // GameObject にコンポーネントをアタッチする // エディター上かつ非再生時のみ、Undo 操作の登録および Dirty マークを行う gameObject.AddComponentAsUndoable<SpriteRenderer>(); } public void Example02() { if (TryGetComponent(out SpriteRenderer spriteRenderer)) { // オブジェクトを破棄する // エディター上かつ非再生時のみ、Undo 操作の登録および Dirty マークを行う spriteRenderer.DestroyAsUndoable(); } } public void Example03() { // 任意のアクションを実行する // エディター上かつ非再生時のみ、Undo 操作の登録および Dirty マークを行う this.DoActionAsUndoable("Increment Counter", x => { x.Counter++; }); } }
DoActionAsUndoable
の第 1 引数の文字列は、Undo History ウィンドウで表示されるタイトル名です。お好きな文字列で大丈夫です。
API リファレンス
英語にはなりますが、API リファレンスもございます。
インストール方法
Package Manager を使用する方法
導入したい Unity プロジェクトで Package Manager を開き、「+」ボタンを押して「Add package from git URL...」を選択、以下の URL を入力して「Add」ボタンを押すとインストールできます。
https://github.com/gigacreation/UnityUndoExtensions.git?path=Assets/UndoExtensions
手動でインストールする方法
GitHub のリポジトリからソースコードをダウンロードし、その中の Assets/MissingFinder/
ディレクトリを導入したい Unity プロジェクトにコピーします。
*1:シーン名に「*」マークが付いている状態