Undoproは、Unityのデフォルトシステムに統合されたコマンドベースの元に戻すシステムです。これにより、開発者はユーザーを新しい元気な作業フローに強制せずに、元に戻す/やり直しのアクションを使用できます!
フォーラムスレッド
UndoProの使用方法 /ツールの配布方法によっては、いくつかのオプションがあります。
Unityは、UNDOシステムに関する非常に限られた情報のみを提供します。
内部的には、コマンドベースのレコードを追加するためのAPIが呼び出されると、UndoProはデフォルトシステムにダミーレコードを作成します。これは、利用可能なコールバックを使用して追跡され、コマンドはそれぞれやり直しスタックまたはその他の方法から切り替えると実行されます。大きなハーデンは、デフォルトの元に戻すシステムの動作でした。それはほとんど予測不可能です!レコードは、元に戻す/やり直したときに特定の条件で複製するか、消滅する場合があります。それは非常に困難ですが、しっかりした追跡アルゴリズムを作成するための要件です。明らかに、新しいレコードの追加も検出する必要があります。
追跡が行われた場合、元に戻すとスタックの両方のシフト値が別々に計算されます(覚えておいてください、元に戻す/やり直し中に記録が消えたり重複したりする可能性があります!)。その後、内部レコードがそれに応じて更新され、元に戻す/redoのレコードが概説されています。
これらすべての方法で、追加のコールバックonundoperformed/onredoperformed/onaddundorecordが呼び出されます。
シリアル化も大きな問題であり、アクション、さらに悪い匿名のアクションをシリアル化するのは困難です。 Undoproは、シリアル化する必要があるすべてのカスタムレコードを保持する現在のシーンに隠された一時的なGameObjectを維持しています。シリアル化は、アクション、オブジェクト、メソッドなどのすべての組み合わせをインテリジェントに処理するいくつかのラッパークラスによって達成されます。
このシステムは一般的に使用することもできます! - >すべてのシリアル化可能なオブジェクト(UnityEngine.Objectとsystem.Objectの両方)と非正解オブジェクトを部分的にサポートします(1レイヤーシリアル化可能なメンバーシリアル化)、他のすべてのオブジェクトはデフォルト化されます - >ほとんどの匿名アクションでもサポートされます(まだ見つかりません)!コンテキストを完全に使用して、ほぼすべてのローカル変数を参照できます(上記の条件が適用されます)!
このシステムは信頼できるように見えますが、完全に防弾であるとは主張していません!ただし、追跡を台無しにしたときに発生する可能性のある最悪のケースは、レコードが少量で相殺されることです(アクションは1つまたは2つのレコードが実行されるか2つのレコードが実行されます)。幸いなことにそのような状況は現在ありませんが、失敗に対して責任を負いません!あなたがそれを壊すことができた場合は、それについて私に通知し、あなたがしたことの情報を(問題を通して)提供してください、そして私はこれを修正しようとします:)
プロジェクトのどこかにundoproフォルダーを置くだけで、あなたは行きます!エディターフォルダーにある必要はありませんが、実行時に使用できるという意味ではありません。エディターAPIを必要とする機能は、プリプロセッサチェックによって実行時に除外されます。一方、エディターフォルダーには、1の機能をテストする2つの便利なウィンドウがあります。元のシステム自体と2。アクションシリアル化システム。これらのウィンドウに加えて、システムを簡単にデバッグして、#define undo_debug in undopromanagerでどのように機能するかを確認できます。あなた自身のプロジェクトにアクションシリアル化システムを使用するために、もちろんライセンスとともにフォルダーUndopro/serializableActionをコピーするだけです!
開発者向けのAPIは非常に簡単です。 undopro依存関係を追加してから、undopromanagerを使用してシステムと対話します。重要な要素:
推奨事項:何かを計算したり、中間結果で操作を実行した場合、結果がシリアル化可能であれば、これをセットアップするのは非常に簡単です。元に戻す/redoアクションで再計算する代わりに、以前のシリアル化可能な結果を元に戻すアクションとREDOアクションの新しい結果を設定するだけです。終わり!
この拡張機能はSeneralによって作成され、MITライセンスの下で公開されています(ライセンスでさらに指定されています。MD)