【问题标题】:How to Reload a Scene without reloading the random generated index?如何在不重新加载随机生成的索引的情况下重新加载场景?
【发布时间】:2016-09-24 12:34:26
【问题描述】:

所以,我正在制作一个游戏,当某个关卡开始时,它会随机生成一个索引来克隆一个预制件。我的目标是当玩家按下“重试”按钮时,我需要重新加载场景,但仍然需要克隆以前的预制件(通过索引获取,一旦场景启动,索引将随机生成。什么是实现“重试”按钮的最佳方法是在随机生成游戏时。

这是我的脚本

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

  }

}

【问题讨论】:

    标签: c# unity3d unityscript unity5


    【解决方案1】:

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

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

    DontDestroyOnLoad(obj);
    

    【讨论】:

    • 我知道我需要序列化我的种子,但是我将如何根据上面的脚本序列化它(randomIndx)?
    • 好吧,我无权访问您的代码库,所以我不能说如何最好地做到这一点。我通常在场景之间(使用上述方法)保持某种控制器游戏对象处于活动状态,以保持种子和其他数据。你问的是这个吗?
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多