技術と開発

UnityでAnimationに含まれるキーフレームの合計を確認する方法【スクリプト】

seironsyugi

スクリプトを作成して、Unity(ユニティ)でAnimation(アニメーション)に含まれるキーフレームの合計を確認する方法です。

ざっくり解説

キーフレーム数…画像の赤枠内のひし形の数。動きを切り替えるポイント。
フレーム数…画面の青枠コマ数のこと。超ざっくり言うとアニメーションの長さ。

フレーム数とキーフレーム数は似てるようで違うよ!

Googleアドセンス

準備(1回やればOK)

Unityを開いて、以下の順に作業して下さい。

①プロジェクトの「Project」ビューを表示


②フォルダを作成

Assets を右クリック →「Create > Folder」→ 名前を Editor にする


③C# Scriptの作成

Editor フォルダをダブルクリックして開く

Editor フォルダの中で右クリック →「Create > C# Script」を選びます。

C# Scriptの名前は「AnimationKeyframeCounter」にしてください


④スクリプトの書き込み

作ったスクリプトファイル AnimationKeyframeCounter.cs をダブルクリックすると、コードエディタが開きます。
(「.cs」は勝手にタイトルにつきますので、名前入力時には入れなくてOK)

コードエディタ内のコードを全て削除して以下のコードを丸ごとコピーして貼り付けて下さい。

using UnityEngine;
using UnityEditor;
using System.Linq;

public class AnimationKeyframeCounter
{
    [MenuItem("Tools/Count Animation Keyframes")]
    public static void CountKeyframes()
    {
        // 選択したアニメーションクリップだけを取得
        var clips = Selection.objects.OfType<AnimationClip>();

        if (!clips.Any())
        {
            Debug.LogWarning("アニメーションクリップが選択されていません!");
            return;
        }

        int totalKeyframes = 0;

        foreach (var clip in clips)
        {
            int clipKeyframes = 0;

            // アニメーションのプロパティ一覧を取得
            var bindings = AnimationUtility.GetCurveBindings(clip);

            foreach (var binding in bindings)
            {
                var curve = AnimationUtility.GetEditorCurve(clip, binding);
                clipKeyframes += curve.length;
            }

            Debug.Log($"Clip '{clip.name}' has {clipKeyframes} keyframes.");
            totalKeyframes += clipKeyframes;
        }

        Debug.Log($"=== 合計キーフレーム数: {totalKeyframes} ===");
    }
}

コードを保存してUnityの画面に戻って下さい。

これで作業は完了です。


キーフレームカウンターを動かしてみる

まず、キーフレームを数えたいアニメーションを選択して下さい。

上のメニューからTools > Count Animation Keyframesをクリック
(これは先ほどの作業で追加されています!)

画面下の「Console(コンソール)ウィンドウ」に、こんな表示が出ます。

これでアニメーションのキーフレーム数を確認することが出来ました!

なぜUnityには「キーフレーム総数カウント機能」が標準搭載されていないのか?

私がアニメーションのキーフレーム数を知りたかった理由は、メタバースのアプリ「cluster」でクラフトアイテム内のアニメーションの制限がされているからです。
「全てのAnimationに含まれるプロパティごとに数えたキーフレームの合計は50000個以下である必要があります」というものです。

しかし、それを調べるための情報があまり出回っていませんでした。

そもそも……
Unityには「キーフレーム総数カウント機能」が標準搭載されていません。

Unity自体がユーザーが簡単に確認出来ないけど、内部的にはカウントしてる情報が多かったり、アニメーションを内部的に最適化していて、キーフレームの数そのものを意識しなくても良い作りになっているらしいです。(そうなんですか?)

そのため、今回のようにアプリ側でアニメーションのキーフレーム数が制限されていない限り、あまり意識しなくても良い部分なので、情報が出回ってない……のかな?

CHiHAYA
CHiHAYA

でも、VRChat等にアニメーション付きアバターをアップするとキーフレームが多ければ多いほどデータも重くなるので、確認する方法は付けて欲しい……

あわせて読みたい
VRChat,clusterで使える!Vsinger用歌モーションの作り方
VRChat,clusterで使える!Vsinger用歌モーションの作り方
Xからコメントをお待ちしています。
ブログ更新の励みになります!
Googleアドセンス
Googleアドセンス
記事URLをコピーしました