Godot v4.1.3
結論
エラー文に書いてあるノードが見つからず困っている。
godotのシーンファイルを直接みてこれが書いてあるアイテムを見つけ、再度設定し直せば正しく動くようになる。
これが起きた原因はGodotがシーンを切り分けたり統合する機能のバグ。
現象
原因と思われること
サブビューポートが望ましい順番で読み込まれていない。
シーン内ツリー構造や、取り込んだシーンなどが疑わしい。
状況①
こういうSubViewPortをテクスチャとして利用する構造にする
Viewportができてないと使う側で怒られるので使う側よりも上にViewportを配置している
このシーンをまた別のシーンの子として吊り下げる
すると上のエラーが出た。
右クリックから「ローカルにする」を選ぶとエラーは消える。
けどシーンの再利用性が使えないのは困る。
妥協案
上記「編集可能な子」にチェックをつけると下記のように黄色く表示される。
あくまで推測だが、サブビューポートはレンダリングに関係するので内部でも特別な扱いを受けているのではないだろうか。どういった形であれ予め読み込んでおくことでローカルに展開したのと同じ効果が期待できる。
余談
確実にバグなのでイシュー投げたいんですけど英語弱すぎてすでにこのイシューがあるのかどうかもわからないのでここに書いときます
状況②(再発した)
後日プロジェクトを開きそのまま再生したところ上と全く同じエラーが出た。
さらに謎の差分が出るようになった。
ちゃんと調べたところプロジェクトを開き直した直後は問題なし、"該当シーンを2Dモードで表示した後"に再生ボタンを押したときにこの差分が生成されるようだった。ただしこの条件を満たしても該当差分が出ない場合もあり、いまいちわからん。
この差分が生まれている場合は書いてあるとおりパスがなぜか勝手に改変されているのでサブビューポートを使った処理がうまく読み込まれない。
あとついでに問題が起きそうなシーンのプレビューが真っ黒になってるっぽかった。もしやここも内部的にサブビューポートを使ってて、それでなんか変な問題が起きてるとかじゃなかろうな。
さらにさらに、サブビューポートを読み込んでいるパーティクルでの指定もおかしくなっていた。
なぜか平文表示で、各ノードにあるアイコンがなぜかない表記になっている。
設定し直したらこう↓
ちなみにこれで設定し直してももとに戻るわけではない。
のだが、妥協案の項でやった「編集可能な子」のチェックを外すと直った。
結果オーライなのだが、なぜこのような現象が起きたのだろうか?
仮説
こんな変な状態に自らしたわけがない。
ということで状況①の操作のどこかでここが勝手にすり替わるのだと考えた。
特にシーンをファイルに切り分ける処理とかいかにもアヤしい。
今は正しく動く状態になっている。
このような構成になっている。
また、SubViewportはGPUParticles2Dからテクスチャとして参照されている。
ここに操作を加えてバグらせるのを目指す。
検証①
DamageDisplayを「ローカルにする」してみる。
バグりました。(SubViewport特有のアイコンが表示されていない)
実際動かしても例のエラーが出るしテクスチャは正しく表示されない。
私の直感鋭すぎか?
そしてこれを直せば直る。
検証②
逆に「ブランチをシーンとして保存」をする。
うおお、いきなりエラー出た
そして吊り下げられてて参照できるはずのExport変数が全部抜けた状態になってるな
(これは仕様かも)
そんで案の定SubViewportの参照はこわれている。
上で悩まされていたバグの状態と一致した。
まとめ
ということで、なんか致命的な問題というよりはシーン切り分け操作がうまくいかないことによるデータ不整合で直したら解決しそうっすね。
それはそうと上の妥協案で再起動前は正しく動いてたのが謎……