※Qiita初投稿です。。お作法よくわかってないので、教えていただけると幸いですm()m
突然こんなエラーが出た
とりあえず Fix Dependencies(依存を修復)を押してみる。
前面のWarningはまぁいいとして、
リソースとパスは正しく参照できているはずなのに。。なんで?
無理やりシーンを再生してみる
ちょっと動く。。というのも
- Scene1の時に「2」キーを押すとScene2に移動
- Scene2の時に「1」キーを押すとScene1に移動
という構成のプロジェクトだけど、
2・3回移動すると途中で動かなくなる。
Debugger 上のエラーを見る
- 「scene_1.tscn」の15行目に存在しないリソースへの参照があるよ~
- 「scene_1.tscn」から別のファイルが読み込まれてるよ~(循環参照があるかも。。?)
2行目はよくわからないけどとりあえずシーンファイルの15行目を見てみるか。。
「scene_1.tscn」の15行目
GitHubをさまよう
たくさんさまよってみた結果、「Cyclic Dependency」なるバグのようなものがあるらしい。(多分Godot4以上だけ?)
https://github.com/godotengine/godot/issues/80877
ここに該当のバグに関連するissueが大量にまとめられている。
原因
複数のシーン(クラス?)からお互いのシーンを「preload」してインスタンス化したりするとだめみたい。
解決方法
いくつか先述のTRACKERを読んでみたけど、解決方法として言われてるものをいくつか抜粋
- .godot フォルダごと消せ
- .godot フォルダ内で、エラーが吐かれたシーン名が含まれているファイルを消せ
- preload() ではなく load() を使え
などなど。。
とりあえずシーンの遷移機能や preload 的な行をすべて削除したが自分の場合は直らなかった。。
結局Debugger上で言われている「scene_1.tscn」の該当行を削除したところ直った。
はまりそうなポイント
プロジェクト読み込み時にアクティブになっているシーンにエラー内容が左右されそう。
前回終了時にscene1を開いていたらscene1の依存エラーが出るけど、scene2ならscene2のエラーが出る。
※なのでどのシーンがお互いをpreloadしているのか確認して、関連するコードをすべて対処しなきゃだめそう。
まとめ
該当のエラーが出たら
- とりあえず「Project > Reload Current Project」してみる
- お互いを preload() していたら _ready() 内での load() 等に置き換える
- お互いを preload() していたシーンの「.tscn」ファイルから、「ExtResource("1_bclal")」で参照されてる行を消す
- 「.godot」フォルダ消す(ただのキャッシュなので大丈夫なはず)
この順番で随時「Reload Current Project」しながら確認すれば多分直るかも??