見出し画像

Godot 4.2 移行で出たワーニング

Gotot Engine 4.2のRC1が出ました! やったね。
RC1はRelease Candidateの略らしいです。きっともう仕様確定だと思うので、ダウンロードして使ってみました。

今作ってるゲームのプロジェクトを開くと、ワーニングがたくさん出ました。原因と修正方法を調べてみました。この記事はその記録です。

メッシュのフォーマットが古い

実行時に出るワーニングです。ResourceLoader.load()関数で、blendファイルをロードするたびに、次のようなメッセージが出るようになりました。

ワーニングメッセージ(1実行で1回のみ表示)
At least one surface uses an old surface format and needs to be upgraded.
The upgrade happens automatically at load time every time until the mesh is saved again or re-imported.
Once saved (or re-imported), this mesh will be incompatible with earlier versions of Godot.

ワーニングメッセージ(loadしたファイルごとに表示)
A surface of res://Scenery/Tree.blend::ArrayMesh_mdrl3 uses an old surface format and needs to be upgraded.

メッシュの内部フォーマットが変わったようです。一度エディタでblendファイルを開いて、「再インポート」すれば出てこなくなりました。ファイルが大量にあって面倒ならば、起動前に<.godot>フォルダを一度消しちゃってもいいと思います。たぶん。

新規のUNSAFE_CALL_ARGUMENT

ワーニングメッセージ
The argument 1 of the constructor "Vector3()" requires the subtype "float" but the supertype "Variant" was provided.

筆者は、プロジェクト設定で、UNSAFE_CALL_ARGUMENTを有効に設定しています。関数の引数が型安全でないと出るワーニングです。これまで出なかった=見落としていた箇所に、このワーニングが新規に出るようになりました。新規に出た個所は、4.1の時点でもコードエディタの行番号がグレーアウトしていたようなので、アンセーフライン判定と一致するようになりました。
(いいことだー)

特に、clampfやVector3など、floatを引数に取る組み込み関数に、floatの付け忘れがたくさんありました。

また、自作関数でも、Texture2Dを引数に取る関数に、横着してload()関数をそのまま突っ込んでたところも、ワーニング対象になりました。これまでは、なんで出なかったんでしょうね?

ワーニングメッセージ
The argument 7 of the function "create_texture_rect()" requires
the subtype "Texture2D" but the supertype "Resource" was provided.

# 4.1ではなぜか見逃されていた書き方(行番号はグレーアウトする)
_texture_rect = Papyrus.create_texture_rect(他の引数, load("res://UIComp/IndicateBar_Frame.png"))

# 型安全な書き方
var texture2d: Texture2D = load("res://UIComp/IndicateBar_Frame.png") as Texture2D
_texture_rect = Papyrus.create_texture_rect(他の引数, texture2d)

ちなみに、以前はエディタがデフォルトで用意する_process関数は、deltaにfloatが付いてなかったので、余計に型安全になりにくい遠因になってたようです。嬉しいことに、4.2では、新規作成したスクリプトには、floatが付くようになりました。

# 4.1で新規作成
func _process(delta):
	pass

# 4.2で新規作成
func _process(delta: float) -> void:
	pass

playback_process_modeが無くなった

AnimationPlayer.playback_process_modeが無くなったようです。使ってるとワーニングが出ます。互換性を残してあるみたいで、4.2でも一応動くみたいです。

AnimationPlayerはAnimationMixerという新クラスのサブクラスになったようです。このAnimationMixerのプロパティcallback_mode_processが、以前のplayback_process_modeに相当するものです。

# 4.1
_anim_player.playback_process_mode = AnimationPlayer.ANIMATION_PROCESS_MANUAL
↓
# 4.2
_anim_player.callback_mode_process = AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_MANUAL

以上です~~

4.2も使っていくぞう


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