💃
【Godot Engine】コードからSpriteFramesを生成する
はじめに
WOLF RPGエディターの歩行グラフィックをGodot Engineで使用する時に、同じようなSpriteFramesを量産する必要が出てきました。
毎回手動で作るのはつらいので、GDScriptを使って自動で生成できるようにします。
コード
Main.gd
func generate(target:CompressedTexture2D):
# ファイルパスを指定
var directory:String = target.resource_path.get_base_dir()
var filename:String = target.resource_path.get_file().get_basename()
var save_path:String = "{0}/{1}.tres".format([directory, filename])
var size:Vector2 = target.get_size()
var sprite_frames:SpriteFrames = SpriteFrames.new()
# 画像をフレームに分割
var flames:Array = []
for i in range(4):
for k in range(6):
var texture:AtlasTexture = AtlasTexture.new()
texture.atlas = target
texture.region = Rect2(size.x / 6 * k, size.y / 4 * i, size.x/6, size.y/4)
flames.append(texture)
# フレームからアニメーションを作成
const animation_names:Array = ["Down", "Down-Left", "Left", "Down-Right", "Right", "Up-Left", "Up", "Up-Right"]
for n in range(len(animation_names)):
var flames_index:int = n * 3
sprite_frames.add_animation(animation_names[n])
sprite_frames.add_frame(animation_names[n],flames[flames_index])
sprite_frames.add_frame(animation_names[n],flames[flames_index + 1])
sprite_frames.add_frame(animation_names[n],flames[flames_index + 2])
sprite_frames.add_frame(animation_names[n],flames[flames_index + 1])
# SpriteFrames生成時についてくるdefaultは使わないので削除
sprite_frames.remove_animation("default")
# SpriteFramesをtresファイルとして保存
ResourceSaver.save(sprite_frames, save_path)
このコードでは、下の画像のような歩行グラフィックを左上から右下に24分割し、
それぞれの向きのアニメーションを作成してtresファイルに保存しています。
アドオンとして呼び出せるようにしておくと便利なので、同じようなアニメーションを何度も使いまわしたい人にはおすすめです。
参考記事
Discussion