LoginSignup
0
0

【Godot4】Cyclic Dependency について

Posted at

※Qiita初投稿です。。お作法よくわかってないので、教えていただけると幸いですm()m

突然こんなエラーが出た

image.png

とりあえず Fix Dependencies(依存を修復)を押してみる。

image.png

前面のWarningはまぁいいとして、
リソースとパスは正しく参照できているはずなのに。。なんで?

無理やりシーンを再生してみる

image.png

ちょっと動く。。というのも

  • Scene1の時に「2」キーを押すとScene2に移動
  • Scene2の時に「1」キーを押すとScene1に移動

という構成のプロジェクトだけど、
2・3回移動すると途中で動かなくなる。

Debugger 上のエラーを見る

image.png

  • 「scene_1.tscn」の15行目に存在しないリソースへの参照があるよ~
  • 「scene_1.tscn」から別のファイルが読み込まれてるよ~(循環参照があるかも。。?)

2行目はよくわからないけどとりあえずシーンファイルの15行目を見てみるか。。

「scene_1.tscn」の15行目

image.png
自身にアタッチされてるスクリプトのリソース??どゆことや

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しているのか確認して、関連するコードをすべて対処しなきゃだめそう。

まとめ

該当のエラーが出たら

  1. とりあえず「Project > Reload Current Project」してみる
  2. お互いを preload() していたら _ready() 内での load() 等に置き換える
  3. お互いを preload() していたシーンの「.tscn」ファイルから、「ExtResource("1_bclal")」で参照されてる行を消す
  4. 「.godot」フォルダ消す(ただのキャッシュなので大丈夫なはず)

この順番で随時「Reload Current Project」しながら確認すれば多分直るかも??

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0