開発プロセス中に以下の問題に直面しました:
-
シーン遷移の後、ゲームオブジェクトのアクション読み込みがシーンの ready ノードに遅れることに気づきました。具体的には、スクリプトの ready セクションでゲームオブジェクトにシグナルを送って対応するアクションをトリガーしようとした場合、このアプローチはテストで実現不可能であることがわかりました。そこでアプローチを変更し、ゲームオブジェクトが初期化完了を通知するシグナルを送るようにし、その後スクリプトが実行後に返るようにしました。当初は同じアクションを使用し、AnyStat(この機能を満たすため)にリンクしてから元のアクションに戻していましたが、これにより無限ループが発生しました:シグナル発行 → 実行 → シグナル受信 → シグナル発行。その後、完全に新しい設定セット(別々のアクションと接続を含む)を作成することで問題を解決しましたが、これによりVS(ビジュアルスクリプト)アクションシステムが煩雑で肥大化してしまい、まだ最適化する方法を見つけていません。
-
もう一つの問題はシーン読み込みに関連しています。前述の通り、シーン遷移中はゲームオブジェクトがスクリプトの ready 状態に遅れますが、読み込み中は順序が逆転します。「Execute Load」アクションを使用すると、ゲームオブジェクトが先に読み込まれるため、2 つの問題が発生します:
- まず、シーン内のスクリプトが
get_tree()などのメソッドを使用している場合、GameManager.on_loadシグナルを受信した時点でシーンが完全に読み込まれていないとしてエラーが発生します。 - 次に、ゲームがクラッシュしないように読み込みプロセスをずらそうとしたところ、
config.load(SAVE_FILE)などのメソッドを使用するスクリプトが保存データを正しく読み込めなくなりました。現在、保存していた対話情報や進行状況も正しく読み込めませんでした。
私の解決策は、シーン全体を読み込まず、ゲームオブジェクトの状態、プロジェクト変数、スイッチのみを読み込むことにしました。タイトル画面からゲームをロードする際は、追加のプロジェクト変数を設定し、シーンを終了してからアクション接続がその変数を確認するようにしました。これにより、ゲームオブジェクトと ready 状態の両方が完全に初期化された後にのみ保存データの読み込みが行われるようになりました。現在、私のゲームにはシーンが 2 つしかないため、この方法は機能しますが、適切な解決策とは感じられません。
- まず、シーン内のスクリプトが
これらが、シーン読み込みおよび関連するプロセスにおいて現在直面している問題と、私の暫定的な修正策です。より良いアイデアがあれば、ぜひ共有してください。あるいは、さらに詳しく議論することもできます。