以前から気づいていなかった深刻な問題について、自分の体験を共有します。
【セーブデータの読み込み時にクラッシュする問題】
通常、異なるシーン(GameScene)に同じプレイヤーオブジェクトを配置して、各シーンでの操作テストを行います。
プレイヤーがシーン1からシーン2へ移動した場合、プレイ中に問題が発生することはありません。
しかし、シーン2でセーブしてからロードしようとすると、すぐにフリーズしてクラッシュします。
この原因は、2つのシーンに同じプレイヤーオブジェクトが配置されており、ロード時に2回インスタンス化されることでクラッシュが発生するためです。
解決策は簡単そうでしょうか?シーン1以外のシーンからプレイヤーオブジェクトを削除すればよいのです。
そうすれば、プレイヤーがシーン1以外のシーンに移動してセーブ・ロードしてもクラッシュしなくなります。
しかし、ここで大きな問題が発生します。プレイヤーが他のシーンからシーン1に戻ってセーブし、ロードした場合です。
同じようにクラッシュします
![]()
原因は上記と同じです。シーン1のノードにはプレイヤーというオブジェクトが存在するため、プレイヤーがシーン1を離れると、そのオブジェクトはもはやシーン1内にインスタンス化されたものではなくなります。そのため、シーン1に戻った際にシステムがさらにプレイヤーを生成し、クラッシュを引き起こします。
これは非常に頭が痛い問題です。制作しているのはメトロイドヴァニア風のマップで、プレイヤーは複数のシーンを自由に移動できます。もし最初のシーン1に戻ってロードするとクラッシュするという事態はひどすぎます。これを救う方法をご存知ですか?
================================================
【セーブデータ読み込み時のシーンツリー内オブジェクトの位置の問題】
あるプレイヤーオブジェクトが新しいシーンツリーに入った場合、プレイヤーのノードはシーンツリーのどの位置に配置されるのでしょうか?
テストの結果、プレイヤーが新しいシーンに移動すると、デフォルトでシーンツリーの最下部に配置されることがわかりました。これは直感的に理解できますね。nice!
同時に、新しいシーンでセーブしてロードすると、プレイヤーがシーンツリー内の位置が変化していることがわかります↓
図に示されているように、ロード後、プレイヤー(P1)は自動的にこのParallax2D親ノードの最上部に移動します。これにより、同じZソート順を持つ他のオブジェクトがプレイヤーの手前に表示されてしまいます。
この理由が理解できません。新しいParallax2Dノードを作成しても試してみましたが、プレイヤーはこのParallax2D親ノードの下にしか現れません。現在の状況で、ロード後にP1がシーンノードツリー内で位置を動かなくする方法はありますか?

