【Godot】スクリーンショットをPNG画像で保存する方法

この記事では実行中のゲームをPNG画像で保存する方法を解説します。

スクリーンショットPNG画像で保存する方法

サンプルとして以下のようなオブジェクトが動き回るコードを書きます。

そのシーンに以下のコードを記述します。

extends Node2D

# ビューポートのパス
# 未指定の場合はルートを使います
export(NodePath) var viewport_path = null

# キャプチャするビューポート
onready var target_viewport = get_node(viewport_path) if viewport_path else get_tree().root.get_viewport()

# PNGファイルとして保存する
func save_to(path):
    var img = target_viewport.get_texture().get_data()
    img.flip_y()
    return img.save_png(path)

func _process(delta: float) -> void:
    if Input.is_action_just_pressed("ui_accept"):
        
        # ユーザーパスに保存する場合
        #var path = "user://capture.png"
        
        # リソースパスに保存する場合
        var path = "res://capture.png"
        save_to(path)
        print("SAVE PNG")

スペースキーでPNGとしてスクリーンショットを保存するようにしました。また保存場所は「res://」としています。このパスはたいていはデバッグ時のみしか使うことができない(読み取り専用になる可能性があり、保存できないことがある)ので、配布した機能に実装する場合は「user://」に保存したほうが良いと思います。

 このコードを実行して、SPACEキーを押すとプロジェクトフォルダに「capture.png」がスクリーンショットとして保存されます。

プロジェクトファイル

今回作成したプロジェクトファイルを添付しておきます。

http://syun777.sakura.ne.jp/tmp/godot-data/TestPNG.zip

参考

以下のスレッドのコードを参考にしました