2016-09-24 5 views
0

これは、あるレベルが開始されたときに、プレハブをクローンするためのインデックスをランダムに生成していたゲームです。プレイヤーが 'try again'ボタンを押したときにシーンをリロードする必要がありますが、それでも前のプレハブ(インデックスで取得され、シーンが開始されるとインデックスはランダムに生成されます)をクローンする必要があります。ゲームはランダムに生成された再試行ボタンを?実装に行うための最善の方法。ランダム生成インデックスを再ロードせずにシーンをリロードする方法は?

これは私のスクリプト

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine.UI; 


public class RandomControl : MonoBehaviour { 

    public List<GameObject> prefabBG = new List<GameObject>{}; 
    GameObject newObject; 
    public static int randomIdx = -1; 
    public static bool isCloned = false; 

    public void Awake() { 
     GenerateRandom(); 
    } 
    void Start() 
    { 
     isCloned = false; 
    } 

    void Update(){ 

     GenerateRandom(); 

    } 

    void GenerateRandom(){ 
     if (randomIdx == -1) { 
      randomIdx = Random.Range (0, prefabBG.Count); 
     } 
     if (randomIdx > -1 && isCloned == false) { 
      Destroy (newObject); 
      GameObject randomBG = prefabBG [randomIdx]; 
      newObject = Instantiate (randomBG) as GameObject; 
      newObject.transform.SetParent (gameObject.transform, false); 
      isCloned = true; 
     } 
    } 

    void Restart(){ 

    } 

} 

答えて

0

Pseudorandom Number Generationの利益同じコンテキスト(シード)与えられていることを、あなた'LLです あなたの場合は、使用した種子(Random.Seed)を追跡して、そのレベルが再び必要なときにジェネレータに戻したいとします。

シーンがリロードされている場合は、種子をシリアル化、またはメモリに保管されますゲームオブジェクトに以下のメソッドを呼び出すためのいずれかの必要があります。

DontDestroyOnLoad(obj); 
+0

私は私が私の種子をシリアライズする必要があることを得るが、上記のスクリプトに基づいて、どのように(randomIndx)シリアル化しますか? – Critics

+0

コードベースにアクセスできないので、どのようにするのが最適かは言えません。私は通常、シードやその他のデータを保持するために(上記の方法で)シーン間で何らかのコントローラのgameオブジェクトをアクティブにしています。それはあなたが求めていることですか? – Augure

関連する問題