Unity2Dでスプライト（画像が１つまとめてあるやつ）からモーションを自動で作成する


# 目次
[1. まえがき](#まえがき) 
[2. 結論](#結論) 
[3. 全ての素材入れたAnimationを作成](#全ての素材入れたanimationを作成) 
[4. AnimationファイルのpptrCurveMappingの部分をコピペしてtxt化](#animationファイルのpptrcurvemappingの部分をコピペしてtxt化) 
[5. txtファイルからFileIDのみを取得](#txtファイルからfileidのみを取得) 
[6. FileIDからAnimationを複数作成](#fileidからanimationを複数作成) 
[7. 実行](#実行) 
[8. まとめ](#まとめ) 


# まえがき
Unityで2Dゲームを作る際、下のようなスプライトを使用することがあると思います。

![FreyaS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/1fc542de-40cb-53d3-be21-88e7f2beef3e.png)
[ゆるドラシル RPGツクール素材提供サイトのフレイヤ](https://yurudora.com/tkool/) 

https://yurudora.com/tkool/

この画像をUnityで使用したいと思ったら
・画像の切り分け
参照：[nityでスプライト（画像が１つまとめてあるやつ）を切り分ける方法](https://miyagame.net/sprite/)
![スクリーンショット 2023-03-10 144955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/21755691-b671-a47a-7e94-9ff77e0a484e.png)


・素材の1つをHierarchyに出しAnimatorをコンポーネント
参照：[Unity 2Dアクションの作り方【アニメーション作成】](https://dkrevel.com/makegame-beginner/make-2d-action-animation/)
![スクリーンショット 2023-03-10 145819.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/71319ca1-bc30-1ee2-9e41-4ce52726cb52.png)

・Animator Controllerを作成したのちAnimator内に導入
参照：[Unity 2Dアクションの作り方【アニメーション作成】](https://dkrevel.com/makegame-beginner/make-2d-action-animation/)
![スクリーンショット 2023-03-10 145506.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/7e5eaaf7-c990-156d-5270-c44c3944a946.png)
![スクリーンショット 2023-03-10 145523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/b79944b1-9b63-3ef5-d684-5ca48dbacbbd.png)

・Window＞Animation＞AnimationでAnimationを作成
参照：[Unity 2Dアクションの作り方【アニメーション作成】](https://dkrevel.com/makegame-beginner/make-2d-action-animation/)
![スクリーンショット 2023-03-10 150242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/5c75e6fa-b590-6cf5-606e-35b4ce9c682c.png)
先ほど切り分けた素材0→1→2→1→0で待機状態(?)のモーションを作成
![レコーディング-2023-03-10-150858.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/37fd850f-870e-7207-08fc-901299944e4c.gif)
といった流れになると思います。
問題なのは最後のanimationの作成の手順。
![FreyaS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/1fc542de-40cb-53d3-be21-88e7f2beef3e.png)
ゆるドラシルのスプライトは横9×縦6の54種類で3つで1組なため18つのAnimation作成できます。~~多い！~~
素材のキャラを増やすと18の倍数づつ増えていくためさらに多くなります。
**数が多すぎて~~そんなのやってられない~~ため、自動化を試みました。**

# 結論
結論をいうと完全自動化は無理でしたが、ある程度の自動化には成功しました。
手順は以下の通りです。
1. [全ての素材入れたAnimationを作成](#全ての素材入れたanimationを作成) 
1. [AnimationファイルのpptrCurveMappingの部分をコピペしてtxt化](#animationファイルのpptrcurvemappingの部分をコピペしてtxt化) 
1. [txtファイルからFileIDのみを取得](#txtファイルからfileidのみを取得) 
1. [FileIDからAnimationを複数作成](#fileidからanimationを複数作成) 

順に説明していきます。

# 全ての素材入れたAnimationを作成
まず初めに切り分けたすべての素材を詰め込んだAnimationを作成します。
![スクリーンショット 2023-03-10 192659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/f5965b9e-2ef9-028a-58b0-2b2ea9fa679e.png)

:::note info
Shiftキーを使えば簡単に複数のprojectタブの素材を選択できます
:::

作成したanimationファイルをVScodeなどのエディターで開くと下記のようになっています

:::note warn
警告
Unity上でCtr+Sなどの保存を行わないと反映されないので気を付けてください(2敗)
:::

<details><summary>フレイヤの素材を全て入れたanimationファイル</summary>

```rb
%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: New Animation
  serializedVersion: 6
  m_Legacy: 0
  m_Compressed: 0
  m_UseHighQualityCurve: 1
  m_RotationCurves: []
  m_CompressedRotationCurves: []
  m_EulerCurves: []
  m_PositionCurves: []
  m_ScaleCurves: []
  m_FloatCurves: []
  m_PPtrCurves:
  - curve:
    - time: 0
      value: {fileID: -964861972627419651, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.016666668
      value: {fileID: -4601839220051827856, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.033333335
      value: {fileID: -1056826484694997815, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.05
      value: {fileID: -1158100502417944942, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.06666667
      value: {fileID: 6943375991475072377, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.083333336
      value: {fileID: 6862453240167101196, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.1
      value: {fileID: 8277301849047400619, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.11666667
      value: {fileID: 7321675060975734423, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.13333334
      value: {fileID: -8886226170175040296, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.15
      value: {fileID: -7315815190574178413, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.16666667
      value: {fileID: -1628973792630015623, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.18333334
      value: {fileID: 2688058052847995457, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.2
      value: {fileID: 5146300132090638205, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.21666667
      value: {fileID: 8612103298388519002, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.23333333
      value: {fileID: -3005837894321400390, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.25
      value: {fileID: 4815336511862190452, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.26666668
      value: {fileID: -5864148461886379403, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.28333333
      value: {fileID: -4953666823269280629, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.3
      value: {fileID: -311895720485211514, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.31666666
      value: {fileID: -5186902469381402330, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.33333334
      value: {fileID: 7278491402254451532, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.35
      value: {fileID: 8256032080180098766, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.36666667
      value: {fileID: 6563074484271356680, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.38333333
      value: {fileID: -4215754394132753658, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.4
      value: {fileID: 7497703085604861517, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.41666666
      value: {fileID: -140951958587282892, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.43333334
      value: {fileID: 2891272152236622026, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.45
      value: {fileID: 503337006453547290, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.46666667
      value: {fileID: -3615104126135534113, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.48333332
      value: {fileID: -8262058837553664321, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.5
      value: {fileID: 4689648869347632470, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.51666665
      value: {fileID: -799649161100189917, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.53333336
      value: {fileID: -1787021197605773777, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.55
      value: {fileID: -5060247094520902029, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.56666666
      value: {fileID: -7134795176709959434, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.5833333
      value: {fileID: -5950624716388236383, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.6
      value: {fileID: -4526010008668306558, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.6166667
      value: {fileID: -6552007183038197407, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.6333333
      value: {fileID: 5532814027816515702, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.65
      value: {fileID: -8529415349653719219, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.6666667
      value: {fileID: 8869316479295928225, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.68333334
      value: {fileID: 3152178736222740502, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.7
      value: {fileID: -2023549405097373126, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.71666664
      value: {fileID: 3537821203643451822, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.73333335
      value: {fileID: -6585872367576136451, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.75
      value: {fileID: -4941201520790536638, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.76666665
      value: {fileID: -3303184691673769200, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.78333336
      value: {fileID: -18684483802693169, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.8
      value: {fileID: 253898423026037340, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.81666666
      value: {fileID: -8543913171838432685, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.8333333
      value: {fileID: -2539205730421474931, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.85
      value: {fileID: -5863792351164199999, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.8666667
      value: {fileID: -1833113814962414588, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - time: 0.8833333
      value: {fileID: 7897757135273334916, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    attribute: m_Sprite
    path: 
    classID: 212
    script: {fileID: 0}
  m_SampleRate: 60
  m_WrapMode: 0
  m_Bounds:
    m_Center: {x: 0, y: 0, z: 0}
    m_Extent: {x: 0, y: 0, z: 0}
  m_ClipBindingConstant:
    genericBindings:
    - serializedVersion: 2
      path: 0
      attribute: 0
      script: {fileID: 0}
      typeID: 212
      customType: 23
      isPPtrCurve: 1
    pptrCurveMapping:
    - {fileID: -964861972627419651, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4601839220051827856, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1056826484694997815, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1158100502417944942, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6943375991475072377, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6862453240167101196, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8277301849047400619, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7321675060975734423, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8886226170175040296, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -7315815190574178413, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1628973792630015623, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 2688058052847995457, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 5146300132090638205, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8612103298388519002, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3005837894321400390, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 4815336511862190452, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5864148461886379403, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4953666823269280629, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -311895720485211514, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5186902469381402330, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7278491402254451532, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8256032080180098766, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6563074484271356680, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4215754394132753658, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7497703085604861517, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -140951958587282892, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 2891272152236622026, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 503337006453547290, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3615104126135534113, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8262058837553664321, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 4689648869347632470, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -799649161100189917, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1787021197605773777, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5060247094520902029, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -7134795176709959434, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5950624716388236383, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4526010008668306558, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -6552007183038197407, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 5532814027816515702, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8529415349653719219, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8869316479295928225, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 3152178736222740502, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -2023549405097373126, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 3537821203643451822, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -6585872367576136451, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4941201520790536638, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3303184691673769200, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -18684483802693169, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 253898423026037340, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8543913171838432685, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -2539205730421474931, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5863792351164199999, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1833113814962414588, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7897757135273334916, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
  m_AnimationClipSettings:
    serializedVersion: 2
    m_AdditiveReferencePoseClip: {fileID: 0}
    m_AdditiveReferencePoseTime: 0
    m_StartTime: 0
    m_StopTime: 0.9
    m_OrientationOffsetY: 0
    m_Level: 0
    m_CycleOffset: 0
    m_HasAdditiveReferencePose: 0
    m_LoopTime: 1
    m_LoopBlend: 0
    m_LoopBlendOrientation: 0
    m_LoopBlendPositionY: 0
    m_LoopBlendPositionXZ: 0
    m_KeepOriginalOrientation: 0
    m_KeepOriginalPositionY: 1
    m_KeepOriginalPositionXZ: 0
    m_HeightFromFeet: 0
    m_Mirror: 0
  m_EditorCurves: []
  m_EulerEditorCurves: []
  m_HasGenericRootTransform: 0
  m_HasMotionFloatCurves: 0
  m_Events: []

```
</details>

# AnimationファイルのpptrCurveMappingの部分をコピペしてtxt化

まず初めに他のキャラ切り分けた素材を全て入れたanimationファイルを見てください。

</details><details><summary>ロキのの素材を全て入れたanimationファイル</summary>

```rb
%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: New Animation
  serializedVersion: 6
  m_Legacy: 0
  m_Compressed: 0
  m_UseHighQualityCurve: 1
  m_RotationCurves: []
  m_CompressedRotationCurves: []
  m_EulerCurves: []
  m_PositionCurves: []
  m_ScaleCurves: []
  m_FloatCurves: []
  m_PPtrCurves:
  - curve:
    - time: 0
      value: {fileID: 1028554412710824610, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.016666668
      value: {fileID: 8770337821196452605, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.033333335
      value: {fileID: -478530073766021669, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.05
      value: {fileID: 746662855887842566, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.06666667
      value: {fileID: 7930036128909813800, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.083333336
      value: {fileID: 1128255078774422026, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.1
      value: {fileID: -4028077866212815098, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.11666667
      value: {fileID: -3543938660656569840, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.13333334
      value: {fileID: -5531168250382527491, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.15
      value: {fileID: 1024244580606554049, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.16666667
      value: {fileID: -3939982276282180439, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.18333334
      value: {fileID: 1230322070027652441, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.2
      value: {fileID: -4330988582189811724, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.21666667
      value: {fileID: 8482282895084324922, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.23333333
      value: {fileID: 2089641497648478256, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.25
      value: {fileID: 1964294715045691463, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.26666668
      value: {fileID: 1968909510626845067, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.28333333
      value: {fileID: -3643246003113000918, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.3
      value: {fileID: 7799004501529556184, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.31666666
      value: {fileID: -8956768362819075929, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.33333334
      value: {fileID: 3646164688782368145, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.35
      value: {fileID: 4027785544202229449, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.36666667
      value: {fileID: -5858931568564500820, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.38333333
      value: {fileID: 642580427499525078, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.4
      value: {fileID: -7249173427656586123, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.41666666
      value: {fileID: 3749952422302323111, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.43333334
      value: {fileID: 7134734347653491179, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.45
      value: {fileID: -1386638072767002140, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.46666667
      value: {fileID: -362633595069746197, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.48333332
      value: {fileID: 5660215432936169201, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.5
      value: {fileID: -6222230717414218814, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.51666665
      value: {fileID: 3466878479963123204, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.53333336
      value: {fileID: -4435005994839985195, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.55
      value: {fileID: -5725759972188618104, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.56666666
      value: {fileID: -7991504989427528491, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.5833333
      value: {fileID: 6134622074428692512, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.6
      value: {fileID: -888335213327878788, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.6166667
      value: {fileID: -1267135896097771623, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.6333333
      value: {fileID: 5996745832989700051, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.65
      value: {fileID: 1261276160939360892, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.6666667
      value: {fileID: 4318442449833461309, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.68333334
      value: {fileID: 9216129932739184864, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.7
      value: {fileID: 5536550400449473928, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.71666664
      value: {fileID: -3186662486778852696, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.73333335
      value: {fileID: 5209325513352368208, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.75
      value: {fileID: 884150154000790199, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.76666665
      value: {fileID: -1208839137451188001, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.78333336
      value: {fileID: -7826335868054593182, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.8
      value: {fileID: -79352130136498132, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.81666666
      value: {fileID: -7128529209088838074, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.8333333
      value: {fileID: 2298004941350445666, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.85
      value: {fileID: 404554593927829935, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.8666667
      value: {fileID: -4906457785067578182, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.8833333
      value: {fileID: 423883466480865723, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    attribute: m_Sprite
    path: 
    classID: 212
    script: {fileID: 0}
  m_SampleRate: 60
  m_WrapMode: 0
  m_Bounds:
    m_Center: {x: 0, y: 0, z: 0}
    m_Extent: {x: 0, y: 0, z: 0}
  m_ClipBindingConstant:
    genericBindings:
    - serializedVersion: 2
      path: 0
      attribute: 0
      script: {fileID: 0}
      typeID: 212
      customType: 23
      isPPtrCurve: 1
    pptrCurveMapping:
    - {fileID: 1028554412710824610, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 8770337821196452605, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -478530073766021669, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 746662855887842566, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 7930036128909813800, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1128255078774422026, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -4028077866212815098, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -3543938660656569840, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -5531168250382527491, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1024244580606554049, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -3939982276282180439, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1230322070027652441, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -4330988582189811724, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 8482282895084324922, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 2089641497648478256, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1964294715045691463, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1968909510626845067, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -3643246003113000918, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 7799004501529556184, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -8956768362819075929, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 3646164688782368145, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 4027785544202229449, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -5858931568564500820, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 642580427499525078, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -7249173427656586123, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 3749952422302323111, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 7134734347653491179, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -1386638072767002140, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -362633595069746197, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 5660215432936169201, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -6222230717414218814, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 3466878479963123204, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -4435005994839985195, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -5725759972188618104, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -7991504989427528491, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 6134622074428692512, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -888335213327878788, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -1267135896097771623, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 5996745832989700051, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 1261276160939360892, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 4318442449833461309, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 9216129932739184864, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 5536550400449473928, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -3186662486778852696, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 5209325513352368208, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 884150154000790199, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -1208839137451188001, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -7826335868054593182, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -79352130136498132, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -7128529209088838074, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 2298004941350445666, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 404554593927829935, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: -4906457785067578182, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - {fileID: 423883466480865723, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
  m_AnimationClipSettings:
    serializedVersion: 2
    m_AdditiveReferencePoseClip: {fileID: 0}
    m_AdditiveReferencePoseTime: 0
    m_StartTime: 0
    m_StopTime: 0.9
    m_OrientationOffsetY: 0
    m_Level: 0
    m_CycleOffset: 0
    m_HasAdditiveReferencePose: 0
    m_LoopTime: 1
    m_LoopBlend: 0
    m_LoopBlendOrientation: 0
    m_LoopBlendPositionY: 0
    m_LoopBlendPositionXZ: 0
    m_KeepOriginalOrientation: 0
    m_KeepOriginalPositionY: 1
    m_KeepOriginalPositionXZ: 0
    m_HeightFromFeet: 0
    m_Mirror: 0
  m_EditorCurves: []
  m_EulerEditorCurves: []
  m_HasGenericRootTransform: 0
  m_HasMotionFloatCurves: 0
  m_Events: []

```
</details>

フレイヤとロキのanimationファイルの内容はほとんどが同じものとなっていますが、21行目のcurve:と148行目のpptrCurveMapping:の下は大きく異なっています。つまりこの部分が「どのキャラクター素材を使うのか」、「切り分けた素材のどれを使うのか」、といった点を指定しているとわかります。

>フレイヤ
>\- time: 0
value: {fileID: -641581088288083178, guid: 35f37c93cd6317a4ab94763c2ef1b9e0, type: 3}
>\- time: 0.016666668
value: {fileID: 2539848872382155094, guid: 35f37c93cd6317a4ab94763c2ef1b9e0, type: 3}

>ロキ
>\- time: 0
      value: {fileID: 1028554412710824610, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}
    - time: 0.016666668
      value: {fileID: 8770337821196452605, guid: 23849bd0d362c0b4d82b3de7e2d9ebb9, type: 3}

この2つに共通するのはFileIDのは違うがguidは同じということ。つまりguidが「どのキャラクター素材を使うのか」、FileIDが「切り分けた素材のどれを使うのか」を指定していると分かります。
これらのことから切り分けた0,1,2の素材を指定するFileIDとキャラクター素材をするguidを調査して0→1→2→1→0となるようにcurve:とpptrCurveMapping:を書き込むことで、Unityのanimation windowを使わずにanimationファイルを作成できると分かります。
切り分けた素材がどんなFileIDになるかは分からなかったため余計な文字が少ないpptrCurveMapping:の部分をコピペしてテキストファイルを作ります。
~~FileIDの変換方式が分かればテキストファイル作る必要ないのですが、調べてもわかりませんでした(´;ω;｀)~~

<details><summary>作成したテキストファイル</summary>

```FileID.txt
    - {fileID: -964861972627419651, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4601839220051827856, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1056826484694997815, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1158100502417944942, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6943375991475072377, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6862453240167101196, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8277301849047400619, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7321675060975734423, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8886226170175040296, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -7315815190574178413, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1628973792630015623, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 2688058052847995457, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 5146300132090638205, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8612103298388519002, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3005837894321400390, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 4815336511862190452, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5864148461886379403, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4953666823269280629, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -311895720485211514, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5186902469381402330, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7278491402254451532, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8256032080180098766, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 6563074484271356680, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4215754394132753658, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7497703085604861517, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -140951958587282892, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 2891272152236622026, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 503337006453547290, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3615104126135534113, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8262058837553664321, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 4689648869347632470, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -799649161100189917, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1787021197605773777, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5060247094520902029, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -7134795176709959434, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5950624716388236383, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4526010008668306558, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -6552007183038197407, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 5532814027816515702, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8529415349653719219, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 8869316479295928225, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 3152178736222740502, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -2023549405097373126, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 3537821203643451822, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -6585872367576136451, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -4941201520790536638, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -3303184691673769200, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -18684483802693169, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 253898423026037340, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -8543913171838432685, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -2539205730421474931, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -5863792351164199999, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: -1833113814962414588, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
    - {fileID: 7897757135273334916, guid: 0d4de27d4bf5f4240a663edf66ffaff2, type: 3}
```

:::note warn
このテキストファイルに余計な文字入れるとこの後バグるので気を付けてください
:::

</details>

# txtファイルからFileIDのみを取得
作成したテキストファイルからfileID:のみを抽出します。
抽出にはC#スクリプトを使用します。
```C#:FileID.cs
using System;
using System.IO;
using System.Text;

class FileID
{
    public String FileIDName = "";
    public void FileIDStart()
    {
        // 文字コードを指定
        Encoding enc = Encoding.GetEncoding("UTF-8");
        String path = CreateAnimeFile.path + "FileID.txt";//staticにしてあるpathとguid名取得
        String guid = CreateAnimeFile.guid;
        //ファイル読み込み
        StreamReader sr = new StreamReader(path, enc);
        //読み込むテキストを保存
        string str = sr.ReadToEnd();
        sr.Close();

        //消す文字
        const string TARGET1 = "    - {fileID: ";
        const string TARGET2 = ", guid: ";
        const string TARGET3 = ", type: 3}";

        // Replaceメソッドでguidなどを消してIDのみを残す
        str = str.Replace(guid, "");
        str = str.Replace(TARGET1, "");
        str = str.Replace(TARGET2, "");
        str = str.Replace(TARGET3, "");
        FileIDName = str;

        // テキストを書き込む
        StreamWriter file = new StreamWriter(path, false, enc);
        file.WriteLine(str);
        file.Close();
        Console.WriteLine("textファイルに書き込みました");
    }
}
```

やってることをざっくり言うとReplaceを使って余計な文字を消すことでfileIDのみをテキストファイルに残しています。

:::note warn
12行目のString pathのCreateAnimeFileは後でてきます。pathはテキストファイルがある場所を指定しています。
:::

# FileIDからAnimationを複数作成
おなじくC#スクリプトを使用してAnimationを作成しています。
```C#:CreateAnimeFile.cs
using System;
using System.IO;
using System.Text;

class CreateAnimeFile
{
    /**  
      <summary>
      書き換えるファイルがあるパス:適当に変える
      @ないとエラー吐く
      </summary>
      */
    public static String path = @"C:\Unity_Date\Animation\Assets\Animation\FreyaS\";
    /**  
    <summary>
    対象の画像のキャラクター名:作成するファイル名に使用：適当に変える
    数字を入れたいので上と分ける
    </summary>
  　*/
    public static String Filename = "FreyaS";
    /**  
    <summary>
    対象の画像のguid:適当に変える
    </summary>
  　*/
    public static String guid = "0d4de27d4bf5f4240a663edf66ffaff2";

    public void CreateAnimeFileStart()
    {
        // 文字コードを指定
        Encoding enc = Encoding.GetEncoding("UTF-8");
        //名前の後ろに入れる番号:増やしていく
        int FileNo = 0;
        //拡張子
        String extension = ".anim";
        //繰り返す回数：作成するアニメーションの数
        int AnimeCount = 18;
        //繰り返す回数：1つのファイルに入れるスプライトの数
        int returnCount = 5;
        //FileIDのみを抜き出したテキストファイルの生成
        FileID FileID = new FileID();//汎用性高そうなので別クラスで行う
        FileID.FileIDStart();
        //改行で区切るって配列化
        string[] lines = FileID.FileIDName.Split(new string[] { "\r\n" }, StringSplitOptions.None);
        //FileIDを管理する二次元リスト:多分切り分けたスプライトを指定している
        List<List<string>> FileIDlist = new List<List<string>>();
        for (int i = 0; i < lines.Length; i += 3)
        {//リストに入れる
            if (lines[i] == "") break;
            List<string> list1 = new List<string>();//リストの中にリストを作る
            Console.WriteLine(lines[i] + ":" + lines[i + 1] + ":" + lines[i + 1]);
            list1.Add(lines[i]);
            list1.Add(lines[i + 1]);
            list1.Add(lines[i + 2]);
            FileIDlist.Add(list1);
        }
        //animeファイル内容
        String File_Contents1 =
@"%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}
";
        String File_Contents2 = @"  serializedVersion: 6
  m_Legacy: 0
  m_Compressed: 0
  m_UseHighQualityCurve: 1
  m_RotationCurves: []
  m_CompressedRotationCurves: []
  m_EulerCurves: []
  m_PositionCurves: []
  m_ScaleCurves: []
  m_FloatCurves: []
  m_PPtrCurves:
  - curve:
";
        String File_Contents3 = @"    attribute: m_Sprite
    path: 
    classID: 212
    script: {fileID: 0}
  m_SampleRate: 60
  m_WrapMode: 0
  m_Bounds:
    m_Center: {x: 0, y: 0, z: 0}
    m_Extent: {x: 0, y: 0, z: 0}
  m_ClipBindingConstant:
    genericBindings:
    - serializedVersion: 2
      path: 0
      attribute: 0
      script: {fileID: 0}
      typeID: 212
      customType: 23
      isPPtrCurve: 1
    pptrCurveMapping:
";
        String File_Contents4 = @" m_AnimationClipSettings:
    serializedVersion: 2
    m_AdditiveReferencePoseClip: {fileID: 0}
    m_AdditiveReferencePoseTime: 0
    m_StartTime: 0
    m_StopTime: 0.6
    m_OrientationOffsetY: 0
    m_Level: 0
    m_CycleOffset: 0
    m_HasAdditiveReferencePose: 0
    m_LoopTime: 1
    m_LoopBlend: 0
    m_LoopBlendOrientation: 0
    m_LoopBlendPositionY: 0
    m_LoopBlendPositionXZ: 0
    m_KeepOriginalOrientation: 0
    m_KeepOriginalPositionY: 1
    m_KeepOriginalPositionXZ: 0
    m_HeightFromFeet: 0
    m_Mirror: 0
m_EditorCurves: []
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []";

        for (int j = 0; j < AnimeCount; j++)
        {
            FileNo = j;
            StreamWriter anime = new StreamWriter(path + Filename + FileNo + extension, false, enc);
            //モーションの名前
            String ContentsFilename = "  m_Name: " + Filename + FileNo + "\r\n";//ファイル名と合わせる;
            //モーションの時間設定
            String curve = "";//スプライトの時間ポイントを指定
            float Time = 0;//スプライトを入れる時間:++0.25する
            for (int i = 0; i < returnCount; i++)
            {
                if (Time == 0)
                {//0.になるため場合分け
                    curve += "    - time: " + Time.ToString() + "\r\n";
                }
                else
                {
                    curve += "    - time: " + Time.ToString("F2").TrimEnd('0') + "\r\n";//文末の0を取る設定
                }
                //0→1→2→1→0の順番でスプライトを設定するための場合分け:素材によって書き換える必要あり
                if (i == 0) curve += "      value: { fileID: " + FileIDlist[j][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 1) curve += "      value: { fileID: " + FileIDlist[j][1] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 2) curve += "      value: { fileID: " + FileIDlist[j][2] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 3) curve += "      value: { fileID: " + FileIDlist[j][1] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 4) curve += "      value: { fileID: " + FileIDlist[j][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
                Time += 0.25f;
            }
            //pptrCurveMappingの作成
            String pptrCurveMapping = "";//上のcurveと同じ物を多分入れないとならない
            for (int i = 0; i < returnCount; i++)
            {
                if (i == 1) pptrCurveMapping += "    - {fileID: " + FileIDlist[j][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 1) pptrCurveMapping += "    - {fileID: " + FileIDlist[j][1] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 2) pptrCurveMapping += "    - {fileID: " + FileIDlist[j][2] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 3) pptrCurveMapping += "    - {fileID: " + FileIDlist[j][1] + ", guid: " + guid + ", type: 3}" + "\r\n";
                if (i == 4) pptrCurveMapping += "    - {fileID: " + FileIDlist[j][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
            }
            // テキストを書き込む
            anime.WriteLine(File_Contents1 + ContentsFilename + File_Contents2 + curve + File_Contents3 + pptrCurveMapping + File_Contents4);
            // ファイルを閉じる
            anime.Close();
        }
        Console.WriteLine("animファイルに書き込みました");

        //倒れこみと起き上がるモーションの作成
        StreamWriter collapse = new StreamWriter(path + Filename + "Collapse" + extension, false, enc);
        StreamWriter getup = new StreamWriter(path + Filename + "Getup" + extension, false, enc);
        //モーションの名前
        String collapseFilename = "  m_Name: " + Filename + "Collapse" + "\r\n";
        String getupFilename = "  m_Name: " + Filename + "Getup" + "\r\n";
        //curveの作成
        string collapsecurve = "";
        string getupcurve = "";
        String curve1 = "    - time: " + 0 + "\r\n";//1つ目の時間
        collapsecurve += curve1; getupcurve += curve1;
        collapsecurve += "      value: { fileID: " + FileIDlist[6][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getupcurve += "      value: { fileID: " + FileIDlist[17][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        String curve2 = "    - time: " + 0.25 + "\r\n";//2つ目の時間
        collapsecurve += curve2; getupcurve += curve2;
        collapsecurve += "      value: { fileID: " + FileIDlist[14][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getupcurve += "      value: { fileID: " + FileIDlist[14][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        String curve3 = "    - time: " + 0.5 + "\r\n";//3つ目の時間
        collapsecurve += curve3; getupcurve += curve3;
        collapsecurve += "      value: { fileID: " + FileIDlist[17][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getupcurve += "      value: { fileID: " + FileIDlist[0][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        //pptrCurveMappingの
        string collapsepptrCurveMapping = "";
        string getuppptrCurveMapping = "";
        collapsepptrCurveMapping += "    - {fileID: " + FileIDlist[6][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        collapsepptrCurveMapping += "    - {fileID: " + FileIDlist[14][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        collapsepptrCurveMapping += "    - {fileID: " + FileIDlist[17][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getuppptrCurveMapping += "    - {fileID: " + FileIDlist[17][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getuppptrCurveMapping += "    - {fileID: " + FileIDlist[14][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        getuppptrCurveMapping += "    - {fileID: " + FileIDlist[0][0] + ", guid: " + guid + ", type: 3}" + "\r\n";
        //ファイルの書き込み
        collapse.WriteLine(File_Contents1 + collapseFilename + File_Contents2 + collapsecurve + File_Contents3 + collapsepptrCurveMapping + File_Contents4);
        getup.WriteLine(File_Contents1 + getupFilename + File_Contents2 + getupcurve + File_Contents3 + getuppptrCurveMapping + File_Contents4);
        // ファイルを閉じる
        collapse.Close(); getup.Close();
    }
}
```

上記はStreamWriterで.animファイルを作成し、適宜書き込むスクリプトとなっております。

:::note alert
これらのスクリプトはUnityではなくローカルにC#のコンパイル環境を作って実行するものとなっております。
:::

# 実行
CreateAnimeFile.csを実行すると20個のanimationを作成できます。

>内訳
>素材の数54÷3=18
>18+立ち上がりと倒れこむアニメーション=20

作成したanimationをAnimator Controllerに入れることで完成です。
![スクリーンショット 2023-03-10 205416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/80eda9a5-5b65-be7f-ee58-1787fff96b5b.png)
animation windowで確認で再生ができます。
![スクリーンショット 2023-03-10 210232.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729518/2eb9d2eb-b2b5-e4aa-88db-4155e19db334.png)

作成したモーション
0.待機
1.攻撃
2.キック？(静止)
3.用途不明(静止)
4.歩く？
5.ジャンプ？
6.被ダメモーション？(静止)
7.つかみ？押す？
8.膝をつく(静止)
9.ガード？押す？(静止)
10.ガードブレイク？
11.膝をつく(＞＜顔）(静止)
12. 被ダメモーション？(＞＜顔）(静止)
13.持ちながら歩く？
14. 膝をつく
15.キック？
16.右手を上げる(強攻撃？)
17.倒れる(静止)
Collapse.倒れこむ
Getup.起き上がる

# まとめ
今回はスプライトの素材から自動でanimationファイルを作成してみました。
完全に自動化はできませんでしたが、C#スクリプトである程度自動化に成功しました。
この記事がどなたかの助けとなれば幸いです。

:::note warn
注意点
この記事のスクリプトはゆるドラシル素材のためのスクリプトとなっているため、素材などによってループ回数など調整する必要があります
:::