web-dev-qa-db-ja.com

団結が別のシーンに移動し、現在のシーンが一時停止されている

Unity3Dでターン制のバトルゲームを作っていますが、2つのシーン(街のシーンとバトルシーン)があります。キャラクターがモンスターと出会うたびに、ゲームはキャラクターが戦闘を行う戦闘シーンにジャンプし、敗北した後、町のシーンに戻ります。

問題は、キャラクターが戦闘シーンに入ったときと同じ状態(キャラクターの位置、ステータスなど)でどのように町のシーンに戻るかです。

使用する場合

Application.LoadLevel('battlescene');

その後

Application.loadLevel('townScene');

その後、タウンシーンは最初から始まります。中断したところからタウンシーンを継続させるには?

11
Jason

これを達成できると思う方法は2つあります。それはすべて、ターゲットプラットフォームとリソースの重要性によって異なりますが、ここで説明します。

1)リソースが問題ではない場合

通常のシーンと戦闘シーンのすべてのオブジェクトを1つのシーンにまとめることができます。

  • 2つの空のゲームオブジェクトを作成します(1つはタウンシーンオブジェクト用、もう1つはバトルシーンオブジェクト用)。その後、ゲームキャラクターのバージョンを2つまたは1つ持つことができます。次に、戦闘がトリガーされたときにカメラを町のシーンから戦闘シーンに切り替え、戦闘が終了したときに町のシーンに戻すだけのスクリプトを記述します。

  • 各キャラクターのバージョンが1つある場合は、ゲームキャラクターコントローラーの動作をバトルモードとノーマル/タウンモードに変更するスクリプトを追加するだけです。

  • 各キャラクターのバージョンが2つある場合は、適切なキャラクターコントローラースクリプトを記述し、使用しているキャラクターに応じてゲームキャラクターをアクティブ化/非アクティブ化するだけです。これがファイナルファンタジー7、8、9のようなゲームが同じ効果を達成した方法です。ゲームキャラクターには、バトルモード用とノーマルモード用の2つのバージョンがありました。

2)リソースが問題である場合(そして私はより効率的な方法だと思います)

Application.LoadLevelAdditive 関数を使用できます。この関数を使用すると、別のシーンをロードして、現在のシーンのすべてを破棄するのではなく、新しいシーンとそのすべてのオブジェクトを取得して、現在のシーンに追加できます。したがって、基本的には次のように使用できます。

  • 個別のバトルシーンを作成し、シーン内に空のゲームオブジェクトを作成して、シーン内のすべてのオブジェクトを保持します。

  • あなたのnoramlシーンでも同じことをしてください。

  • バトルモードに移行する必要がある場合は、次を使用します。

    Application.LoadLevelAdditive( 'battlescene');

  • そして、その後バトルシーンをアンロードしたい場合は、バトルシーンのすべてが含まれているため、バトルシーンゲームオブジェクトを破棄するコードを記述するだけでアンロードできます。

最初の方法と同様に、2つの異なるバージョンのキャラクターを使用するかどうかを決定できます。 2つのバージョンを持つことの長所の1つは、ゲームモデルについて詳しく説明しないことで時間を節約したい場合(特にゲームが非常に大きい場合)、タウンシーン用に縮小されたモデルを使用することで処理能力を節約できることです。バトルシーンがキャラクターが戦っている場所を表す小さなステージであると仮定して、バトルシーンに洗練されたより詳細なモデルを使用します。ファイナルファンタジーVIIを考えてください。考慮すべきことだけです。

それがお役に立てば幸いです。私はそれをすべてラッシュで書いたが、何かを片付ける必要があるかどうかはわかっている。

15
amasiye

あなたはc#のスクリプトでそれを行うことができます

void onYourFunction()
{
    Time.timeScale = 0; //pauses the current scene 
    Application.LoadLevelAdditive("YourNextScene"); //loads your desired other scene
}

また、ゲームを再びアクティブにしたい場合は、Time.timeScale = 1を使用できます。

4
Shah Abdullah

これが古い投稿であることは知っていますが、使用できる方法がもう1つあります。これは、シーンの状態を保存するためです。これは、ユーザーがApplication.LoadLevelAdditiveを使用して2つのシーンをロードするためのリソースを持っているとは思わない場合に便利です。そのメソッドは、潜在的に2倍のリソースを使用できます。

状態を保存する(ファイルまたはDBに変更される可能性のあるすべての情報を保存する)と、後でレベルをロードして、メモリに保存しないようにすることができます。これを使用してゲームを保存することもできます。

1
Casey Estes