メインコンテンツまでスキップ

セッションと元に戻す

このページを読むと 読み込み が実際に何を変えるのか、元に戻す操作がなぜ作業単位できれいに区切られるのか、表情キーの編集とは何か、そしてなぜ メッシュ保存 を止めるのか、さらにスクリプトのコンパイルやプレイモードを越えて作業が残る理由がわかります。

Work Mesh​

読み込み を押すと、ツールは元のメッシュを複製して一時的なメッシュを作り、レンダラーのメッシュ参照をその複製に向けます。この複製が Work Mesh です。

  • 元のアセットファイルは、開くことも書き込むこともしません。
  • すべての編集(ブラシ、ギズモ、ウェイト、表情キーの構造変更)は、Work Mesh の上で行われます。
  • セッションが終わると(編集を破棄、または別の対象への切り替え)、レンダラーは元の参照に戻り、Work Mesh は捨てられます。

ファイルに書き出すのは メッシュ保存 だけです。→ メッシュ保存の内部動作

ウェルドグループ​

Unity のメッシュは、UV のシーム、法線のシーム、マテリアルの境界で頂点を分けるため、同じ位置に複数の頂点が並んでいます。画面では 1 点に見えますが、データには 2~4 個あります。

ツールは、ローカル空間で位置が同じ頂点を 1 つのウェルドグループとしてまとめて扱います。

  • 選択はグループ全体をまとめて選びます。
  • ブラシとギズモの変形は、グループ全体に同じ値を書き込みます。
  • ウェイトペイントの結果も、グループ全体に同じ値で記録されます。

そのため、頂点を 1 つだけ動かしても UV のシームが開かない、という結果になります。

対称も同じ考え方の上にあります。左右の対応は、インデックスではなく、ローカル空間のバインド位置から探します。左右の頂点数が完全に一致していなくても動作するのはそのためです。

元に戻す​

Unity の Ctrl+Z をそのまま使います。ツール独自の元に戻すスタックは持たず、Unity のスタックに乗せます。

1 つの意図 = 元に戻す 1 段階というのが原則です。

操作元に戻す単位
ブラシのストロークマウスを押してから離すまで全体で 1 段階
ギズモの変形ドラッグ 1 回で 1 段階
G/R/S のモーダル確定 1 回で 1 段階
ウェイトブラシストローク 1 回で 1 段階
選択ボーンのスムーズのスライダーマウスを離したときに 1 段階として確定
削除、分離、結合、表情キーの構造変更操作 1 回で 1 段階
塗った領域の処理適用 1 回で 1 段階
複数メッシュの一括操作全体を複合的な 1 段階

マスクの変更も元に戻す対象です。一方、非表示は対象外です。メッシュデータではなく、セッションの表示状態だからです。

構造のスナップショット​

頂点数やインデックスが変わる操作(削除、分離、結合、キーの追加と削除)は、1 つの値を戻すだけでは元に戻せません。このような操作では、操作の前にメッシュ全体のスナップショットを取り、元に戻す操作が来たときにそれを復元します。

スナップショットはメモリを使うため、上限があります。上限を超えると、古いものから破棄され、その旨が通知されます。

表情キーの編集​

新しいキーの造形と既存のキーの編集は、複数の段階にわたる作業なので、途中の状態を保存してはいけません。そのため、開始と終了がはっきりした単位で囲みます。これをトランザクションと呼びます。

  • 開始すると、バッジが キー編集中 になり、シーンビューとウィンドウに固定のバーが表示されます。
  • Enter で確定、Esc でストロークを取り消します。Esc ではキー編集は破棄されません。
  • 編集が開いている間は、メッシュ保存 と 新規キーとして保存 の両方がブロックされます。

編集が開いている間も、形を整える と 選択・移動 のタブに移って作業できます。ただし、頂点数が変わる操作は、キーとして保存できません。

元に戻す操作で編集が無効になる場合​

Ctrl+Z が編集の開始より前まで戻ると、編集の基準が失われます。その場合、ツールは黙って続けることはせず、編集を取り消します。やり直し(Redo)も同じ規則です。判定は、編集の開始時に記録しておいた値で行うため、結果は常に同じになります。

このとき、ウィンドウには次の案内が表示されます:取り消しが「{編集名}」編集開始前まで戻り、編集内容が無効になりました。安全のため編集をキャンセルしました。

自動保持と復元​

スクリプトを保存すると、Unity はドメインをリロードします。そのとき、エディターのウィンドウの状態はほとんどリセットされます。編集セッションをそのままにしておくと、保存していない作業が警告なしで消えてしまいます。

そこで、次のタイミングで、編集中の Work Mesh を Library/EmeAutoSave/ に保持します。

  • ドメインのリロードの直前
  • Play モードに入る直前
  • ウィンドウを閉じるとき、シーンを閉じるとき
  • Unity を終了するとき

保持された編集は、同じエディターの実行中(ドメインのリロードを含む)や、Unity が正常に終了した後に次に開いたときに、自動的に復元されます。頂点、表情キー、ウェイト、未保存の状態まで、そのまま戻ります。Play モード中は元のメッシュが表示されます。

  • 保持に失敗した場合は、Play モードへの移行と終了が止まり、理由がステータス行に表示されます。
  • 保存したことのないシーンのオブジェクトは保持できないため、先にシーンを保存するよう案内されます。ウィンドウの シーンを保存 と 編集を破棄 のボタンで、すぐに対処できます。
  • ウィンドウを複数開いている場合、復元は 1 つだけ行われます。
  • 復元できなかったファイルは削除されません。

復元すると、ステータス行に 保持された編集{N}件を復元しました。復元前の編集はCtrl+Zで元に戻せません。 と表示されます。

クラッシュへの備え​

保存していない編集があり、内容が変わった場合にだけ、編集の合間にチェックポイントを残します。チェックポイントは少なくとも 60 秒の間隔を空けます。Unity が予期せず終了するか強制終了すると、自動では復元されません。次にウィンドウを開いたときに、バナーが表示されます。

  • 復元: チェックポイントの状態にセッションを戻します。
  • 破棄: 5 秒以内に 2 回押すと実行されます。

復元できなかったファイルは削除されません。

バナーは状況を分けて案内します。編集を作成したシーンのファイルが見つからない場合(削除済み、またはインポート中)は復旧ファイルを残し、インポートが終わると再確認します。対象オブジェクトが開いているシーンにない場合は復元できず、編集N件を削除 だけが使えます。このボタンは 5 秒以内にもう一度押すと実行され、シーンとアセットは変更されません。

Play モード中に編集が保持されているあいだ、開始カードは 編集は保持されています と表示します。編集は Play を終了すると戻り、Play モード中は 読み込み を使えません。

セッションの終わり方​

方法結果
メッシュ保存アセットとして保存して終わります
編集を破棄元のメッシュに戻して終わります。確認を求めます
別の対象に切り替える保存していない編集があれば、通知を出して切り替えを止めます

Tab はここには含まれません。編集入力をオフにするだけで、セッションは残ります。

セッション中に、レンダラーやメッシュがシーンから消えた場合は、そのセッションだけが静かに整理されます。ほかのセッションは残ります。