【Godot】2Dスプライトアニメーションの基本的な使い方

# 概要
この記事では Godot Engineでの 2Dスプライトアニメーションの基本的な機能について書きます

# スプライトシートを使ったアニメーションについて
`Sprite` には以下のような等間隔で並んだ画像（スプライトシート）を扱う機能があります。
![FrogT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/fbe4399a-e246-e3fc-8951-e881fd3c0153.png)
この画像を "frog.png" という名前で保存します。

なお素材は 尾羽の小屋様からお借りしました。

* [尾羽の小屋](http://obane.tuzikaze.com/material/charachip_animal.html#top)

`Sprite` ノードを追加して、`Texture` にこの画像を読み込みます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/4c34109d-1718-d81f-76d9-4cd107ed6dc8.png)

そして、`Animation > Vframes` を 「4」、`Animation > Hframes` を「8」に設定します。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/1573cf5f-8dd8-aeff-69f4-500930cb0ebe.png)

これはスプライトシートが、横方向に８つ、縦方向に４つ並んでいる、という指定となります。
![frog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/c4e2ce50-d7b1-ca87-f32f-3cf3d77ed950.png)
そして、`Frame`の値を変更するとパターンが変化します。
![shot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/0f831c55-9fed-ae94-68f6-d9aedc44b1a2.gif)
`Frame`には切り出したフレームの番号を指定します。`8 x 4 = 32` なので 32パターン(0〜31)のフレームが存在することになります。

# `AnimatedSprite` によるアニメーション制御
アニメーションをどの順番で行うかをスクリプトだけで制御したい場合は以下の手順は不要です。

アニメーション制御を定型化したい場合には、`AnimatedSprite` を使用するとどのフレームを待機モーションとするか、向きはどっちを向いているかという定義を作ることができます。
`AnimatedSprite` を使用する場合は `Sprite`は不要なので削除してしまって問題ありません。

では、`AnimatedSprite` ノードを作成します。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/2546cbde-d746-3199-2965-ea2a1c8bc8cf.png)
作成直後は警告マークが表示されています。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/eba05ff5-a4d2-a79a-b787-4965c2591c6b.png)
警告マークをクリックすると、"Frames"プロパティに値設定が必要、とのメッセージが表示されます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/305accb2-7569-34b2-60b0-4b483fd5a87f.png)
`AnimatedSprite`ノードのインスペクタから、`Frames > [空]`をクリックして、「新規 SpriteFrames」を選びます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/a703bee6-2da0-9a34-ba6d-b56e9b6beb8d.png)

作成された「SpriteFrames」をクリックすると、「スプライトフレームエディタ」が表示されます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/cc284a2f-de6a-8fd0-437a-c3f4b3cc30b3.png)

スプライトフレームに画像を登録する方法は２つあります。

1. 画像(.pngなど)を1枚ずつ登録する
2. スプライトシートを登録する

![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/8fed5781-7d3c-e572-fc7d-a688f0c2646e.png)
エディタにはそれぞれ専用のボタンが用意されています。

今回は「②スプライトシートから登録する」なので、格子状になっているアイコンをクリックします。
するとファイル選択ダイアログが表示されるので、「frog.png」を選んで「開く」をクリックします。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/31016dbc-974a-4716-5018-94d9b73858d1.png)
フレーム選択ダイアログが表示されるので以下のように設定します。

1. 水平：「８」 / 垂直：「４」を指定
2. 「すべてのフレームを選択/消去」をクリック
3. 「32フレームを追加」と表示されたらクリック

![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/3572e6ed-8694-a683-e264-af7905a926ab.png)
するとアニメーションフレームにすべてのフレームが表示されます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/b5194642-bd58-c5b8-ed83-0ddddcb479a1.png)
そうしたら、インスペクタから`Playing` にチェックを入れます。
![Godot_Engine_-_TestAnim_-_Player_tscn_____と_「【Godot】2Dスプライトアニメーションについて」を編集_-_Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/344ccdbf-68d2-8591-87d0-6957ed1e7bae.png)
すると、アニメーションが再生されます。
![shot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/5dc1b519-6e9a-2601-06fd-11019b4fba97.gif)
ただ、これだとすべてのフレームが再生されているだけなので、適切なアニメーションを作成します。

アニメーションの文字の下にある「新規作成アイコン」をクリックします。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/7b0f4798-96b4-7c97-e78a-5a4094b9c05a.png)

すると「New Anim」というアニメーションが追加されます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/fafc4346-c397-0c04-7910-e901ce622a40.png)
これを「move_left」にリネームします。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/439233b8-d8fa-5a00-d57f-02796a9e9bbe.png)
そうしたら、スプライトシート追加ボタンをクリックします。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/f059be6f-cf4f-1ba0-d0a4-fcb52a9e25eb.png)
"frog.png" を選んで「開く」をクリックします
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/c51837b9-8a90-9b06-0494-a63ec528d21d.png)
左向きの画像を4つ選んで「4フレームを追加」ボタンをクリックします。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/5a992225-9838-b7d8-3f95-43715aa6508b.png)
"move_left" アニメーションに4つのフレームが追加されました。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/3d614600-e678-46e8-3f16-d1d524e02a72.png)
なのですが、「0」「1」は待機アニメーションなので消しておきます。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/eb174f5a-f164-e3f6-2578-14d3048fd884.png)

同様の手順で、右向きの移動アニメーション "move_right" を追加します。
![Godot_Engine_-_TestAnim_-_Player_tscn____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/5f5c7f92-8512-58f0-f0bd-9c73ac1faecf.png)

## 移動スクリプトの追加
`Player`ノードに以下のスクリプトをアタッチします。

```gd:Player.gd
extends Node2D

# スプライトアニメーション
onready var anim = $AnimatedSprite
# 移動速度
var velocity = Vector2(300, 0)

func _process(delta):
	if Input.is_action_pressed("ui_left"):
		# 左に移動
		anim.animation = "move_left"
		position -= velocity * delta
		
	elif Input.is_action_pressed("ui_right"):
		# 右に移動
		anim.animation = "move_right"
		position += velocity * delta
```

あと、カエルくんが原点にいるとわかりにくいので少し右下に移動させておきます。
![Godot_Engine_-_TestAnim_-_Player_tscn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/bcb32d2f-eec9-afae-727f-c77d09c84006.png)

実行して、左右キーで移動できることを確認します。
![shot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43772/3ed21c1a-d30c-06ad-e50c-4663a70128ac.gif)