Unity Random正在摧毁所有对象

时间:2018-02-09 18:12:28

标签: unity3d destroy

我试图让系统正常工作,以便在游戏开始时和每个墙上,它会随机出现在游戏中。不知何故,当我运行它时,它会保留或摧毁所有的墙壁。我该如何解决这个问题?

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

public class WallGen : MonoBehaviour{

    public GameObject wallObject;
    System.Random rnd = new System.Random();

    // Use this for initialization

    void Start () {
        generate();
    }

    void generate()
    {
        int number = rnd.Next(1, 5);
        if (number == 2)
        {
            OnDestroy();
        }
    }

    private void OnDestroy(){
        Destroy(wallObject);
    }

    // Update is called once per frame
    void Update () {

    }
}

1 个答案:

答案 0 :(得分:1)

每次执行new System.Random()时,都会使用时钟进行初始化。现在,当同时调用Start函数时,您将获得所有gameobjects的相同值。您应为所有Random保留一个gameobjects个实例,并在同一个实例上继续使用Next
或简单的解决方案
只需使用Random.Range (1,5)代替rnd.Next(1, 5);

作为旁注,请不要使用函数名OnDestroy,因为它是Unity中的MonoBehaviour functions之一,并且在附加的游戏对象被销毁时会自动调用。

相关问题