初めに
UnityでAnimation Clipを使ってアニメーションを制御することはよくあります。しかし、こちらを変更する方法として、FBXからD&Dをする方法もありますができない場合もあります(FBXが手元にない場合)。 この場合の対応方法として、animation clipを直接テキストとして変更する方法を今回は使っていきます
開発環境
- Unity 2022.3.10f1
アニメーションは、以下のアセットを使用しています。
Animationにイベントを追加
アニメーションクリップのyamlの確認
(注) サンプルとして使用するアセットは、通常通り使用できるため ReadOnlyにはなっていません。例として使用しています
まずは、追加したいアニメーションをテキストエディタで開きます。
以下のようなテキストが表示されるため、一番下の行にある m_Events
を変更していきます。
%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!74 &7400000 AnimationClip: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Walk_wing serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 0 m_RotationCurves: - curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 time: 0 value: {x: 0, y: -0, z: -0, w: 1} inSlope: {x: 0, y: 0, z: 0, w: 0} outSlope: {x: 0, y: 0, z: 0, w: 0} tangentMode: 0 weightedMode: 0 inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334, w: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334, w: 0.33333334} .... m_EditorCurves: [] m_EulerEditorCurves: [] m_HasGenericRootTransform: 0 m_HasMotionFloatCurves: 0 m_Events: []
アニメーションイベントのyaml定義の確認
まずは、通常通り UnityのAnimation Eventから以下のように Test
という Animation Eventを追加します。
この時にテキストエディタ側で確認をすると以下のようになっています。
m_Events: - time: 0 functionName: Test data: objectReferenceParameter: {fileID: 0} floatParameter: 0 intParameter: 0 messageOptions: 0
任意の時間にイベントを追加
アニメーションのフレームを確認する必要があります。今回はFBXがあるので確認をすると以下のよう30FPSになっています。
1frameは 1/30s ≒ 0.033sです。そのため任意のフレームに入れたい場合は、1/30 × フレーム数になります。
例として10フレーム目と20フレーム目に追加するといます。この場合は以下のように追加をします。
m_Events: - time: 0.33333334 functionName: Test data: objectReferenceParameter: {fileID: 0} floatParameter: 0 intParameter: 0 messageOptions: 0 - time: 0.6666667 functionName: Tetst data: objectReferenceParameter: {fileID: 0} floatParameter: 0 intParameter: 0 messageOptions: 0
上記を追加することで、以下のように指定したフレームにAnimatioin Eventを追加することができます。