Unity3d:Random.Range()不按我想要的方式工作

时间:2013-11-01 18:50:20

标签: unity3d unityscript

我正在从列表中生成对象,所以我让他们找到已经存在于场景中的父对象。问题是Random.Range()不能像我想的那样工作。我希望列出的对象生成一个随机的父对象,相反,它们会产生相对于列表顺序的父对象。

实施例。 0,1,2,3,4,5,6,7,8,9 =差 防爆。 8,3,1,4,6,3,7,9,5,2 =好 洛尔

var theRange = Random.Range(obj1.Length,obj1.Length);
    for(var i: int = 0; i < theRange; i++){
        var obj2 : GameObject = obj1[i];
        if(obj2.transform.childCount == 0){
        objfromList.transform.parent = obj2.transform;
        objfromList.transform.localPosition = Vector3(0,-2,0);
    }
    }

非常感谢

1 个答案:

答案 0 :(得分:1)

跟进我的评论,听起来你只是想要一个随机播放功能。这是一个简单的Fisher-Yates shuffle

void shuffle(int[] a){
    for(int i = a.Length-1; i>=0; i--){
        int j = Random.Range(0,i);
        int tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }
}

void usage(){
    int[] a = {0,1,2,3,4,5}; // assumes obj1.Length = 6
    shuffle(a);
    for(int i = 0; i < a.Length; i++){
        GameObject obj2 = obj1[a[i]];
        GameObject objFromList = GetNextObject(); // dummy method grabbing next list object

        objFromList.transform.parent = obj2.transform;
        objFromList.transform.localPosition = Vector3(0,-2,0);
    }
}

这可以帮助您满足您的需求。如果obj1的顺序不重要,您可以直接对其进行随机播放,而不是在我的示例中使用a之类的辅助数组。