UnityでAnimation Curveをエディタから編集するユーティリティAnimation Utilityの使い方をまとめました。
Unity2021.3
Animation Utilityとは?
Animation Utilityは、Unityエディタ上でAnimationClipを編集するためのユーティリティです。
スクリプトから各キーフレームの編集やアニメーションイベントの設定が可能です。
本記事では、このユーティリティの概要を紹介し、実際に使ってみます。
キーフレームを編集する
まず、キーフレームを編集してみます。
キーフレームを編集するには、AnimationUtility.GetEditorCurve
でAnimationCurve
を取得し、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などを設定することができます。
AnimationUtilityでも以下のAPIを使うことでこれらの設定が可能です。
AnimationUtility.SetKeyLeftTangentMode
AnimationUtility.SetKeyRightTangentMode
AnimationUtility.SetKeyBroken
AnimationEventなども設定できる
そのほか、AnimationUtilityでは、AnimationEvent
の設定なども行うことができます。
その他のAnimationUtilityでできることについては、Unityの公式ドキュメントを参照してください