如何在不重新加载随机生成的索引的情况下重新加载场景?

时间:2016-09-24 12:34:26

标签: c# unity3d unityscript unity5

所以,我制作了一个游戏,当某个级别开始时,它会随机生成一个索引来克隆预制件。我的目标是当玩家按下“再试一次”按钮我需要重新加载场景但是它仍然需要克隆前一个预制件(通过索引获得,并且索引将在场景开始后随机生成。什么是当游戏随机生成时,实施“再试一次”按钮的最佳方式。

这是我的剧本

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(){

  }

}

1 个答案:

答案 0 :(得分:0)

Pseudorandom Number Generation的好处是,给定相同的上下文(种子),您将始终获得相同的结果。 因此,在您的情况下,您希望跟踪您使用的种子(Random.Seed),并在需要该级别时将其反馈给生成器。

如果重新加载场景,则需要序列化种子,或者在游戏对象上调用以下方法将其保留在内存中:

DontDestroyOnLoad(obj);