Open16

Godot 4.0 所感

SLMNLLSLMNLL

これは何

フリーのゲームエンジン、Godot Engineの大型アップデート、バージョン4.0 beta1 がリリースされたので、使ってみた感想、Tipsなどをメモします[1]

大型アップデートのベータ版ということもあり、個人的には今のところ4.0は実用とするには若干不安定な印象です。メインの開発環境としてはバージョン3.5.xをうほうが良さそうです。

なお、特に言及がない場合の使用環境はintel iMac / macOS 11.5以降です。

脚注
  1. 3.x系との違いにかなり戸惑いながら手探り書いています。 ↩︎

SLMNLLSLMNLL

クラッシュ / バグっぽい挙動など

クラッシュやバグが発生する操作について、このコメントにぶら下げるかたちで追記していきます。

環境は基本的には、intel iMac / macOS 11.5+、たまに M1 Macbook Air / maxOS 12+ です。

SLMNLLSLMNLL

CanvasItemのフィルタ設定でクラッシュ

弄ってるとクラッシュします。上述と同じで、エディタ上に表示変更が反映される操作はクラッシュするっぽいです。

SLMNLLSLMNLL

スクリプトやフォルダの変更には注意

任意のシーンにアタッチされたスクリプトや、そのフォルダの構造を変えた場合、そのシーンを編集しようとした段階でクラッシュしました。

リファクタリングとかする際には注意が必要。

SLMNLLSLMNLL

SubViewportを使った特定の状況でDisplayServerがエラーを返す

エラーログを確認した限りでは、macOSのみの現象かもしれません。Godot 4.0 beta2にて発生の確認済。

SubViewportの中にPopupノードを配置し、popup()popup_centered()などでポップアップを表示しようとすると、DisplayServerがエラーを返します。同様のエラーはSubViewportに配置したOptionButtonをクリックした場合にも発生します。

上記のクラスでなくても、DisplayServerとやり取りするクラスであれば、同じエラーが発生する可能性がありそうです[1]

脚注
  1. 既に報告済みです。プロジェクトもアップしてありますので、詳細をご覧になりたい方は該当Issueをご確認ください。 ↩︎

SLMNLLSLMNLL

popup()などで、ポップアップが正しい位置に表示されない

上記のバグとは別に(サブディスプレイを使っている場合)サブディスプレイにゲームウィンドウを配置しpopup()などの関数を呼び出すと、正しい位置にポップアップを表示しないバグもあります。

こちらは、ゲームを走らせた際に明確に問題となる挙動なので、早めに直るといいですね[1]


追記:
beta 3には修正されるそうです[2]

脚注
  1. こちらも既にissueがあります↩︎

  2. https://github.com/godotengine/godot/pull/66712 ↩︎

SLMNLLSLMNLL

無くなった機能

Godot 4.0から無くなった機能を、このコメントにぶら下げるかたちで追記していきます。

SLMNLLSLMNLL

OS.center_window()

ウィンドウを画面の中央に配置するための関数が、OSクラスからなくなりました。

ウィンドウの配置関連の機能はDisplayServerクラスに移ったようですが、center_window()、もしくはそれに類する関数は4.0 beta1時点では実装されていません[1][2]

脚注
  1. githubにPRはあるようなので、いずれ実装されそうです。
    https://github.com/godotengine/godot/pull/65843 ↩︎

  2. 自分でディスプレイサイズから中心を算出するコード書けばいいだけの話ですが、OS.center_window()が便利だったもので… ↩︎

SLMNLLSLMNLL

その他所感

  • スクリプトは、Godot側である程度3.x系4.x系への変換をしてくれる。が、exportなどは自分で書き直す必要あり。
  • 3.xから設定を読み込んでいるのか、4.0はインストール時点でキーボードショートカットに重複があり、正常に動かないものがいくつかあった。
    • 私の環境ではCommand + B実行ブックマークへ移動の2つが割り当てられていた。
    • ショートカット一覧から重複しているものを探して、手作業で解消する必要がある。
    • ショートカット一覧に、キーバインドでソートしたりする機能などはないっぽい。4.0+かどうかというよりは、Godot自体にそういう機能がないようです。
SLMNLLSLMNLL

シーンやノードの編集画面

  • プロジェクトを3.54.0にポートした際に、どちらかというとスクリプトよりシーンの方がグチャグチャになった印象。
    • 一通り4.x系のスクリプトに書き直し終わって「ビルドが通ったな」と思ったら、立ち上がったウィンドウ内のシーンのレイアウトやサイズなど破滅的な感じになってて、途方に暮れました。
    • どうやら3.x系のプロジェクトから値が引き継がれないプロパティが多く、それがレイアウト崩れに繋がっている様子。
SLMNLLSLMNLL

細かい内容ですが、RefCountedfree()を呼び出そうとすると、怒られるようになりました。