2017-03-04 5 views
0

これは、これよりはるかに簡単です。それとも私は自分の無知によって盲目になっている!Unity 5.5.1 - 最後のレベルが読み込まれますか?

私がしたいのは、再生された最後の再生可能レベルの文字列名を取得する方法です。

明確にする: - "Level_100" スルー "Level_01"

をすべて再生可能なレベルは、順次名前が付与されています。

再生できないすべてのシーンには、「スタートメニュー」や「レベル完成」などの名前が付けられています。これらのシーンには、「メインメニュー」や「再生最終レベル」などのボタンが含まれています。

私はUIシステムを使用しておらず、そうしたくはありません。むしろ、私はコライダーを使ってオブジェクトを設定し、ゲームの仕組みを使って "ボタン"として機能しています。例えば、プレイヤーが "Replay Last Level"と呼ばれるボタンを撃つとき、OnCollisionEnter2Dは最後にプレイされたレベルをロードするはずです。

レベルがプレイヤーによって完了または失われるたびに、それらは「レベル完成」に持ち込まれ、いくつかのゲーム統計情報(スコア、時間など)が表示されます。 「メインメニュー」、「最後のレベルを再生する」、「続ける」の3つの選択肢があります。私は必要なもの

は、単純に、常に前にロードされた再生可能なレベルの名前を含む文字列変数である(すなわち、「Level_01」のような名前ではなく、「スタートメニュー」などと、それらを。)

それから私はそれを使用します。適切な場所でGameManagerスクリプトに入力する文字列。プレイした最後のレベルは、プレイヤーが「最後のレベルを再生」したときに読み込まれます。プレイヤーが「続行」を撃つとき、私は次のプレイ可能レベルをプレイしたい。

とてもシンプルなコンセプトです:私は "Level_02"を失ったばかりです。私は今 "LevelCompleted"にいます。私は "Replay Last Level"を撃ちます。私は再び "Level_02"に入る。代わりに、私が「続行」を撃った場合、それは次の再生可能レベルになります。このレベルでは、レベルがロックされていない場合は「Level_03」です。ロックされていない場合は、「続行」ボタンを押すと「level_02」に戻ります。

私は、そうでなければ空のゲームオブジェクトにGameManagerスクリプトを持っています。それはあらゆる場面にとどまるシングルトンです。このスクリプトには、シングルトンであるメインのパブリッククラスと、より大きい配列でデータを含む一連のものがあります。もう1つは、シリアライズ可能な「パブリッククラスGameData」です。これは、ファイルに書き込まれた変数のみを含み、ゲーム中に必要に応じてリロードされます。

答えて

1

多くの場合、答えは私が思ったよりも単純なものでした。

私のGamemanagerスクリプトでは、静的な文字列変数 "currentLevel"を設定しました。アウェイクに続いて

()私はこれをしなかった:

Scene scene = SceneManager.GetActiveScene(); 
    if (scene.name != "LevelCompleted") 
    { 
     currentLevel = scene.name; 
    } 

私は私の「LevelCompleted」シーン「はスタートメニュー」のように、それだけであろうと、別の「非再生可能な」シーンによって開かれることはありませんだろうと実現"Level_xx"のような再生可能なレベルで開くことができます。条件付きを使用することにより、そのシーン "LevelCompleted"が開かれたとき、変数が常に最後に再生された再生可能レベルを含むように、シングルトンGameManagerによって変数が更新されないことが保証される。シーン "LevelCompleted" で

、 "リプレイ最後のレベル" ボタンでは、私が持っている:

private string lastLevelPlayed; 

void OnCollisionEnter2D(Collision2D collision) 
{ 
    lastLevelPlayed = GameManager.currentLevel; 
    SceneManager.GetSceneByName(lastLevelPlayed); 
} 
関連する問題