見出し画像

Godot 4.1 変更点チェック

Godot 4.1が出ました。下記リンクの記事を元に4.0からの変更点をお勉強してみました。

正面の向き

Godotは-Zを正面としているのに、インポートしたモデルはほとんどの場合において+Z向きである、という食い違い問題に関して、対策が講じられたようです。
Node3D.look_at()関数に対して、use_model_front: bool引数が追加されました。trueの場合は+Zを正面として処理されるようです。ちなみにデフォルトはfalse。
また、既存のVector3. FORWARD 定数(0, 0, -1)と対になる、MODEL_FRONT 定数(0, 0, +1)が新たに追加されています。ついでに、MODEL_REARやMODEL_LEFTも追加されています。
指針が示されたことが重要で、向きの食い違いがあることを、仕様や機能が認めるようになったのはいいことだと思います。これで心置きなく、「モデルは+Z向きに作って、ただしオブジェクトの向きは-Zフロントが大前提」という運用ができます。迷いが無くなりました。

ただ、次の一文の意味がよく分かりませんでした。重要な事を言ってるような気がするのですが。

One of the implemented changes swaps the front and back camera directions in the editor.

https://godotengine.org/article/godot-4-1-is-here/
Godot 4.1 is here, smoother, more reliable, and with plenty of new features

エディタのカメラ? 特に変わってないような・・・???

static変数

static変数が使えるようになったようです。

C++やC#のように使えます。これまではAutoLoad機能で作成したシングルトンがstatic領域の代わりだったのですが、これでよりダイレクトにstaticできちゃうわけです。自分で駆動しない、単に使われるだけの物置のようなシングルトンはstaticに置き換えていいかもしれません。

ただ、AutoLoadは面倒くささはあるものの、それゆえに無駄に乱造する衝動を抑えてくれます。また、AutoLoadはプロジェクト設定で全シングルトンがリストされてるので、管理しやすさがあります。
なので、staticを使えるようになったことで、自由度が上がった分、計画性やポリシーはしっかり持たないといけないな、と思いました。

2023/07/27追記
例えばちょっとしたキャッシュ的な使い方に適してそうです。何かの定数的な計算・処理の結果を返すstatic関数があったとして、取得時に毎回計算・処理をするのではなく、初回以降はstatic変数として残した結果を返すようにすれば、パフォーマンスが上がります。
これはAutoLoadで実装するにはちょっと大げさすぎなので、static変数を使うのが丁度よさそうです。

スクリプトエディタ分離

スクリプト編集画面を別ウィンドウに分離できるようになりました。2画面環境の人は便利になると思います。

Surface Override Materialのバグ修正

set_surface_override_materialを使ってもエラーメッセージが出なくなりました。やったー!

どういうことかというと、MeshInstance3D. set_surface_override_materialでオーバライドマテリアルをセットすると、Object.free時にエラーメッセージが表示されることがあったのです。バグだったようです。

# こういった処理の後にノードをfreeするとエラーメッセージが出ていた
mesh_instance.set_surface_override_material(surface_idx, mat)

# こういうメッセージ
# "Condition "!material" is true. Returning: true"

# nullセットで回避はできてたけど・・・
mesh_instance.set_surface_override_material(surface_idx, null)

free前に同関数でnullを再設定することで回避はできてたのですが、本質的な解決ではなかったので、直ってよかったです👏

この記事が気に入ったらサポートをしてみませんか?