はじめに

前回はMoonAnimator2でデータを作るところまでを紹介しました。
今回は、作ったデータをSciriptに入れる前に、どのようなデータ構造で保存され、
どのようにScriptで活用できるようにするのかを紹介します。

データについて

MoonAnimator2のデ―タはServerStorageの中にMoonAnimator2Savesという名前で作られます。
Saveする際につけた名前を階層のトップとして、Index順に階層が作られます。

今回はCFrameという名前でデータを保存しています。
トップの# CFrameのプロパティのValueの中に、ここから始まる階層についての定義が入っています。
少し見てみましょう。

{"Information":{
        "Created":1691397107,
        "ExportPriority":"Action",
        "Modified":1692330302,
        "Length":200,
        "Looped":true
    },
    "Items":[
        {
            "Path":{
                "InstanceTypes":[
                    "DataModel","Workspace",
                    "Model"
                ],
                "ItemType":"Rig",
                "InstanceNames":[
                    "game",
                    "Workspace",
                    "Rig"
                ]
            }
        },
        {
            "Path":{
                "InstanceTypes":[
                    "DataModel",
                    "Workspace",
                    "Model"
                ],
                "ItemType":"Rig",
                "InstanceNames":[
                    "game",
                    "Workspace",
                    "Rig2"
                ]
            }
        },
        {
            "Path":{
                "InstanceTypes":[
                    "DataModel",
                    "Workspace",
                    "Camera"
                ],
                "ItemType":"Camera",
                "InstanceNames":[
                    "game",
                    "Workspace",
                    "CurrentCamera"
                ]
            }
        }
    ]
}

そのままでは読みにくいので改行をいれました。

参考に、この状態で作られている保存データになっています。

Itemに格納されている順で、Rig Rig2 CurrentCameraとなっており。
階層の子となるIndexの数値がそのままこのItemのIndexの順となっているようです。

それでは1の階層を見ていきます。

RigとCFrameとMarkerTrackがあります。
ぞれぞれ、その階層の子にRigとCFrameとEventsのキーの情報が入れられています。
それぞれのキーは、キーがふられたフレームの数字の直下にValueがあり、その下に、CFrameValueというObjectが作られ、キーの情報がプロパティのValueの中に記述されています。

取り扱う際に気を付ける点は、それぞれの階層の下にあるdefaultというCFrameValue Object。
それぞれの階層が動かすObjectの初期位置などの情報を保持しており、MoonAnimator2での作業が終了する際に、初期位置に戻すための数値をここに保持しています。
そのためMoonAnimator2で扱ったObjectが、それ以降アニメを操作するたびに変な位置にワープしてしまう。
なんてことが頻繁に起きるようになります。その際はここの数値を直してください。

エクスポートについて

MoonAnimator2のFileメニューからExportFilesを選択すると、作成したアニメーションがExportされます。

CameraのアニメはCameraの階層化にカーブ情報が1フレーム単位で書き出されCFrameValueObjectが生成されます。
アバター等のRigにつけたアニメーションはそれぞれのModelの直下のAnimSavesの階層に作られます。
AnimSavesはRobloxStudioのアニメーション編集の機能で使うデータ格納場所となります。

Cameraのアニメ―ションは出力されたCFrameValueObejctを順番に処理することでアニメを再現することができます。
キャラクターのアニメーションは、アニメーション編集の機能からアニメを読み込んでRobloxに公開を選択。
登録が完了したら、IDを使ってScriptから呼び出す準備ができます。

Cameraとキャラクター以外のアニメーションは今のところExportされませんので、ServerStorageの中のMoonAnimator2Savesのデータを利用することなります。
そのためには、ServerStorageの中では困るので、ReplicatedStorageの中に複製して使います。

最後に

これで、Scriptで再生するためのデータ側の準備は整いました。

Scriptからぞれぞれのアニメを連動させて再生する仕組みはMoonAnimator2では用意されていませんのでその再生の仕組みが必要になります。
次は、担当を変えて、Script作成の紹介をしていきます。