Godot 4.3移行で出たワーニング
Godotエンジン4.3のDev6が出ました。β前の最終バージョンみたいです。
早速プロジェクトを移行してみました。今まで出なかったワーニングが出るようになりました。これはその記録。
UNUSED_SIGNAL
このワーニング項目自体は4.2から存在していました。
4.3 RC5では、シグナルの所有者がemitせず、第三者にsignalを取らせてemitしていると、このワーニングが出るようになりました。
signal wet_ratio_changed()
# 自分のシグナルをemitするとワーニングにならない
wet_ratio = next_wet_ratio
wet_ratio_changed.emit()
# 4.3ではこれはワーニング
var cell: Cell = area.get_cell(idx_x, idx_z)
cell.wet_ratio = next_wet_ratio
cell.wet_ratio_changed.emit()
型ヒントを使ってても、出ます。
そもそも、これは自分の書き方に問題があって、このCellクラスにある程度の主体を持たせているにも関わらず、外からsignalをemitするということをしています。
Cellクラスの他のsignal同様に、Cellの関数内でemitするのがいいように思います。これならワーニングは出ません。
# このクラスにこういう関数はすでにいくつもあった
func plant_tree() -> bool:
if tree_growth_ratio_pct < 100:
tree_growth_ratio_pct = 100
plant_modified.emit()
return true
return false
# wet_ratioについても同じようにする
func set_wet_ratio(new_wet_ratio: float) -> void:
if new_wet_ratio != wet_ratio:
wet_ratio = new_wet_ratio
wet_ratio_changed.emit()
ENUM_VARIABLE_WITHOUT_DEFAULT
・enumにint値ゼロ相当の項目が存在せず
・そのenumを関数の引数に使っていて
・引数のデフォルト値を定義していない
ときに出るワーニングのようです。多分。
enum SoilType
{
SAND = 4,
DRY_SOIL = 8,
GRASS_GROW = 16,
BUSH_GROW = 18,
TREE_GROW = 20,
ROCK_FACE = 32,
}
# 引数にenumを使っている
# デフォルト値も無い
static func underground_tex_col(soil_type: Cell.SoilType) -> Geomancer.TexCol:
筆者はライブラリを作るでもない限り、引数のデフォルト値を指定しない方針にしてます。なので引数側ではなく、enum側に手を加えることでワーニングを消すことにしました。
ゼロ相当の項目が無いenumは、int値をわざわざ定義していたenumです。タブ区切りのテキストファイルでデータをやり取りするenumや、intにキャストして何かのインデックスにしたりするenumのときに、デザインした値を設定してます。そのときにゼロを欠番にしてる場合があるのです。
enum SoilType
{
NONE = 0,
SAND = 4,
DRY_SOIL = 8,
GRASS_GROW = 16,
BUSH_GROW = 18,
TREE_GROW = 20,
ROCK_FACE = 32,
}
ひとまず、"NONE"でも"INVALID"でもいいので、=0の項目を追加しました。
ワーニングが無くなりました。
なんかそもそもenumに0相当の項目が無いこと自体がGDにとって都合が悪いのかもしれません。根拠ないけど。ひとまず今後は数値指定のあるenumは意識してゼロを追加するようにしていこうと思います。
以上です~~