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

スクリプトを作成して、Unity(ユニティ)でAnimation(アニメーション)に含まれるキーフレームの合計を確認する方法です。
準備(1回やればOK)
①プロジェクトの「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自体がユーザーが簡単に確認出来ないけど、内部的にはカウントしてる情報が多かったり、アニメーションを内部的に最適化していて、キーフレームの数そのものを意識しなくても良い作りになっているらしいです。(そうなんですか?)
そのため、今回のようにアプリ側でアニメーションのキーフレーム数が制限されていない限り、あまり意識しなくても良い部分なので、情報が出回ってない……のかな?

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