LoginSignup
4
2

More than 3 years have passed since last update.

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

Posted at

概要

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

スプライトシートを使ったアニメーションについて

Sprite には以下のような等間隔で並んだ画像(スプライトシート)を扱う機能があります。
FrogT.png
この画像を "frog.png" という名前で保存します。

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

Sprite ノードを追加して、Texture にこの画像を読み込みます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

そして、Animation > Vframes を 「4」、Animation > Hframes を「8」に設定します。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

これはスプライトシートが、横方向に8つ、縦方向に4つ並んでいる、という指定となります。
frog.png
そして、Frameの値を変更するとパターンが変化します。
shot.gif
Frameには切り出したフレームの番号を指定します。8 x 4 = 32 なので 32パターン(0〜31)のフレームが存在することになります。

AnimatedSprite によるアニメーション制御

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

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

では、AnimatedSprite ノードを作成します。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
作成直後は警告マークが表示されています。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
警告マークをクリックすると、"Frames"プロパティに値設定が必要、とのメッセージが表示されます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
AnimatedSpriteノードのインスペクタから、Frames > [空]をクリックして、「新規 SpriteFrames」を選びます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

作成された「SpriteFrames」をクリックすると、「スプライトフレームエディタ」が表示されます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

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

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

Godot_Engine_-_TestAnim_-_Player_tscn____.png
エディタにはそれぞれ専用のボタンが用意されています。

今回は「②スプライトシートから登録する」なので、格子状になっているアイコンをクリックします。
するとファイル選択ダイアログが表示されるので、「frog.png」を選んで「開く」をクリックします。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
フレーム選択ダイアログが表示されるので以下のように設定します。

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

Godot_Engine_-_TestAnim_-_Player_tscn____.png
するとアニメーションフレームにすべてのフレームが表示されます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
そうしたら、インスペクタからPlaying にチェックを入れます。
Godot_Engine_-_TestAnim_-_Player_tscn_____と_「【Godot】2Dスプライトアニメーションについて」を編集_-_Qiita.png
すると、アニメーションが再生されます。
shot.gif
ただ、これだとすべてのフレームが再生されているだけなので、適切なアニメーションを作成します。

アニメーションの文字の下にある「新規作成アイコン」をクリックします。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

すると「New Anim」というアニメーションが追加されます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
これを「move_left」にリネームします。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
そうしたら、スプライトシート追加ボタンをクリックします。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
"frog.png" を選んで「開く」をクリックします
Godot_Engine_-_TestAnim_-_Player_tscn____.png
左向きの画像を4つ選んで「4フレームを追加」ボタンをクリックします。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
"move_left" アニメーションに4つのフレームが追加されました。
Godot_Engine_-_TestAnim_-_Player_tscn____.png
なのですが、「0」「1」は待機アニメーションなので消しておきます。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

同様の手順で、右向きの移動アニメーション "move_right" を追加します。
Godot_Engine_-_TestAnim_-_Player_tscn____.png

移動スクリプトの追加

Playerノードに以下のスクリプトをアタッチします。

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

実行して、左右キーで移動できることを確認します。
shot.gif

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2