Unityメモ – Nullのアニメーション遷移を消すエディタ拡張

Posted: 2016年3月30日 カテゴリー: プログラミングメモ, Unity, Unity メモ, Unityエディタ拡張
タグ:, , , , ,

Unityでアニメーションの遷移や変数の設定を付けたり、消したり、移動したりしていると、”Null transition in state ‘AnyState’ ” と言うエラーが出てきたり、遷移画面でも”Not found”と言う遷移が一覧に出てきます。

これを手で一つづつ消していくのは面倒なので、一括で削除する為のエディタ拡張を紹介します。

では実装に入ります。まず、新しいスクリプトを”Editor”フォルダ内に追加します。

実装でやる事は簡単でして、選択中のオブジェクトにあるAnimationControllerを獲得し、全てのレイヤー内の全ての遷移(transition)を拾います。もしその遷移がnullだったらそこで消していきます。

    [MenuItem("Tools/CleanNullTransition")]
    private static void CleanAnimationController()
    {
        UnityEditor.Animations.AnimatorController animationController = (Selection.activeObject as UnityEditor.Animations.AnimatorController);
        foreach (var layer in animationController.layers)
        {
            foreach (var transition in layer.stateMachine.anyStateTransitions)
            {
                if (transition == null)
                {
                    Debug.Log("Null State FOUND and removed");
                    layer.stateMachine.RemoveAnyStateTransition(transition);
                }
            }
        }
    }

これで後はnull遷移がある物を選択肢、エディタ上のメニューで[Tool/ClearNullTransition]を選択すると、今実装した処理が走ります。

null

以上です。

 

参考、というか実装の元ネタ:

http://forum.unity3d.com/threads/null-transition-in-state-anystate.345397/

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中