【Unity】Animation Curveをエディタから編集するユーティリティAnimation Utilityの使い方

UnityでAnimation Curveをエディタから編集するユーティリティAnimation Utilityの使い方をまとめました。

Unity2021.3

Animation Utilityとは?

Animation Utilityは、Unityエディタ上でAnimationClipを編集するためのユーティリティです。
スクリプトから各キーフレームの編集やアニメーションイベントの設定が可能です。
本記事では、このユーティリティの概要を紹介し、実際に使ってみます。

キーフレームを編集する

まず、キーフレームを編集してみます。 キーフレームを編集するには、AnimationUtility.GetEditorCurveAnimationCurveを取得し、AnimationUtility.SetEditorCurveで変更を保存します。 以下は、全てのカーブに対して2個目のキーフレームの値を1.0に変更するスクリプトの例です。

using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem("Example/SetSecondKeyValuesToOne")]
    public static void SetSecondKeyValuesToOne()
    {
        // 選択中のAnimationClipを編集する
        if (Selection.activeObject is not AnimationClip clip)
            throw new FileNotFoundException("Selected AnimationClip is not found.");

        var bindings = AnimationUtility.GetCurveBindings(clip);

        foreach (var binding in bindings)
        {
            // AnimationCurveを取得
            var curve = AnimationUtility.GetEditorCurve(clip, binding);

            // 2個目のキーフレームの値を全て1.0に書き換える
            var keys = curve.keys.ToList();
            for (var i = 0; i < keys.Count; i++)
            {
                if (i != 1)
                    continue;
                var key = keys[i];
                key.value = 1.0f;
                keys[i] = key;
            }

            curve.keys = keys.ToArray();

            // Undoへの登録と編集したCurveの保存
            Undo.RegisterCompleteObjectUndo(clip, $"Edit AnimationClip {clip.name}");
            AnimationUtility.SetEditorCurve(clip, binding, curve);
        }
    }
}

これを以下のようなアニメーションカーブに適用してみます。

適用前

Example/SetSecondKeyValuesToOneを実行すると、以下のように適用されることを確認できます。

適用後

TangentModeを編集する

次に、「TangentMode」の編集方法について見ていきます。
Animation Editor Windowで各キーフレームを右クリックすると、Tangent Modeなどを設定することができます。

Tangen Mode

AnimationUtilityでも以下のAPIを使うことでこれらの設定が可能です。

  • AnimationUtility.SetKeyLeftTangentMode
  • AnimationUtility.SetKeyRightTangentMode
  • AnimationUtility.SetKeyBroken

AnimationEventなども設定できる

そのほか、AnimationUtilityでは、AnimationEventの設定なども行うことができます。
その他のAnimationUtilityでできることについては、Unityの公式ドキュメントを参照してください

参考

docs.unity3d.com