【Godot】print関数まとめ

Godot Engine で用意されている print関数をまとめた記事となります。

print関数のまとめ

print関数とは

print関数とは、主にデバッグ用として使う機能です。例えば print() を呼び出すとエディタの下部に print() の内容が出力されます。

もし表示されない場合は「出力」をクリックすることで表示することができます。

「出力」ウィンドウの動作設定

出力ウィンドウの動作は、メニューの「エディタ > エディタ設定」から「一般 > 出力」から設定できます。

  • フォントサイズ: 出力ウィンドウのフォントサイズ
  • 実行時には常に出力をクリアする: デバッグ開始時に「出力」ウィンドウの内容をクリアするかどうか
  • 実行時には常に出力を開く: デバッグ開始時に「出力」ウィンドウを表示する
  • 停止時には常に出力を閉じる: デバッグ終了時に「出力」ウィンドウを閉じる

引数には何でも渡せる

print関数には基本的に文字列や数値を渡すことになりますが、リストやオブジェクトを渡すこともできます。

class Obj:
    var a = 1
    var b = 2
    var c = "abc"

func _ready() -> void:
    # 文字列を出力
    var s = "文字列"
    print(s)
    
    # 数値を出力
    var i = 123
    print(i)
    
    # リストを出力
    var list = [1, 2, 3]
    print(list)
    
    # オブジェクトを出力
    var obj = Obj.new()
    print(obj)

これを実行すると以下のように出力されます。

出力結果
文字列
123
[1, 2, 3]
[Reference:1262]

ただオブジェクトはリファレンス番号となってしまうので、_to_string() を実装することで文字列表現にすることができます。

class Obj:
    var a = 1
    var b = 2
    var c = "abc"

    # この実装をすることで print() で文字列表現となる.
    func _to_string() -> String:
        return "a:%d b:%d c:%s"%[a, b, c]

func _ready() -> void:
    var obj = Obj.new()
    print(obj)

引数は複数渡せる

それと引数は複数渡すことも可能です。

func _ready() -> void:
    var s = "文字列"
    var i = 123
    var list = [1, 2, 3]
    print(s, i, list)
出力結果

文字列123[1, 2, 3]

print_stack() はコールスタック情報を出力します。

func _ready() -> void:
    _func1()

func _func1():
    _func2()
func _func2():
    print_stack()

これは _ready()_func1()_func2() を呼び出して、print_stack() を呼び出す例です。

出力結果
Frame 0 - res://Main.gd:9 in function '_func2'
Frame 1 - res://Main.gd:7 in function '_func1'
Frame 2 - res://Main.gd:4 in function '_ready'

出力結果はこのようになり、コールスタックを出力ウィンドウで確認することができます。

ただこの出力処理が何回も呼び出される場合は「出力」ウィンドウのログが大量のコールスタック情報で埋まってしまうので、 push_error() / push_warning() を使う方が良いかもしれません。

print_debug() は、デバッグ実行時のみ出力する関数です。配布するために実行ファイルしたときには出力されなくなります(print() は実行ファイルにしても出力されます)。

printerr(): エラー情報として出力する

printerr() は、エラー情報を出力する関数です。例えば関数呼び出しの引数に「無効な値」が渡されたなどの場合、これでエラー出力しておくと良いです。

例えば以下のように記述します。

func _ready() -> void:
    print("通常の出力")
    printerr("エラー出力")

printerr() が呼び出されると出力」が赤色となり、エラーが発生したことがわかりやすく表示されます。

そして出力された文字が「赤色」となります。

printraw(): 改行なしでprintする

printraw() は他のprint関数と異なり、改行せずに出力します。

func _ready() -> void:
    printraw("A")
    printraw("B")
    printraw("C")

このように記述すると以下のように出力されます。

出力結果
ABC
📌v3.5.1 では printraw() は正しく動かないかもしれません

2022.11.6 時点での最新バージョン v3.5.1 だと、printraw() が正常に動かない(出力されない)ようです。

なので、文字列バッファに値を格納してまとめて出力することで代用します。

var buf = "" # バッファを作っておく
buf += "A"
buf += "B"
buf += "C"
print(but) # まとめて出力する

push_error() / push_warning(): デバッガにスタック情報を登録する

push_error() / push_warning() はデバッガにスタック情報を登録します。呼び出されたときのコールスタックを知りたいときに便利です。

func _ready() -> void:
    push_error("エラースタック")
    _func1()

func _func1():
    push_warning("警告スタック")
    _func2()

func _func2():
    pass

これを実行するとエディタの「デバッガー」に情報が追加されます。

ここを開くと、登録したスタック情報が表示されます。

参考