UnityでReadOnly状態AnimationClipをyamlファイルから変更してEventを追加する

初めに

UnityでAnimation Clipを使ってアニメーションを制御することはよくあります。しかし、こちらを変更する方法として、FBXからD&Dをする方法もありますができない場合もあります(FBXが手元にない場合)。 この場合の対応方法として、animation clipを直接テキストとして変更する方法を今回は使っていきます

ReadOnlyになっている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を追加することができます。

参考サイト

blog.unity.com