前往
大廳
主題

シーン間データ読み取りの問題

當我玩家都王八蛋? | 2023-09-10 00:21:44 | 巴幣 0 | 人氣 69

実際には、セーブ/ロード機能を実装した後、私を長い間悩ませた問題がありました。しかし、実際には、私自身が混乱していただけで、壁にぶつかっていただけでした。達成したい効果は、最初の画面でキャラクターを選択してセーブし、セーブした後に前回のセーブデータが読み込まれ、プレイヤーの情報(体力、位置情報、形状やサイズなど)が読み込まれることです。しかし、これには1つの問題があり、以前はPlayerPrefsという機能を使用してプレイヤーデータを保存し、プレイヤーオブジェクトが生成されるたび(シーンの切り替え時)にこれらのデータを読み込むようにしていましたが、これはセーブデータを読み込む選択肢と衝突します。したがって、セーブ/ロードの読み込み方法とプレイヤーオブジェクトのシーン間移動時の読み込み方法を区別する方法を考える必要がありました。それぞれの読み込み方法は、シーン遷移の方法に応じて異なります。

1. タイトル画面からロード → シーンおよびキャラクターデータ(JSON)の読み込み
2. シーン1からシーン2へ(プレイヤーの体力などの読み込みで位置情報は読み込まない)

したがって、シーンの切り替え時にオブジェクトがどのようにして、タイトル画面から来たのか、前のシーンから来たのかを区別する方法を見つけるのに苦労しました。また、シーンの切り替え時にプレイヤーオブジェクトがリセットされるため、インスペクターに配置されたプレイヤーオブジェクトをどのようにしてシーン間で読み込み、制御するかについても悩みました。最終的に、ChatGPTとの議論の末、タイトル画面から入ったかどうかをチェックするために単純なブール変数を使用することが最善の方法だと気付きました。

具体的には、FromTitleという変数を宣言して、タイトル画面から入ったかどうかを判定します。プレイヤーがタイトル画面からファイルを読み込む(ボタンを押す)と、この変数の値をtrueに変更します。その後、各シーンにGMオブジェクトを配置して検出と読み書きを行います。
タイトル画面から読み込むボタンを押すと、この関数を呼び出し、まず変数の値をtrueに変更し、それをPlayerPrefsで保存してからシーンを切り替えます。注意点として、PlayerPrefsはブール値を直接保存できないため、trueの場合は1(整数)を保存し、falseの場合は0を保存します。後で条件分岐を使用して、これらの値をブール値に変換します。

シーンを切り替えた後、同じスクリプトのStartメソッド内で次のように検出する
fromtitleValueを宣言して、読み取ったFromTitleの整数値を取得し、'fromtitleValueが1であるかどうか'という条件式の真偽をFromTitleに適用することで、整数値をブール値に変換できます

出来た!
1.前のシーンから:
2.タイトル画面から:
おやすみ

創作回應

更多創作