0

我正在从列表中生成对象,到目前为止,我让它们找到了一个已经存在于场景中的父对象。问题是 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);
    }
    }

深表感谢

4

1 回答 1

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我的示例中那样使用辅助数组。

于 2013-11-01T19:15:31.467 回答