2017-12-20 16 views
1

4 개 플랫폼에서 4 개 인스턴스를 생성합니다. 내가 원하는 것은 매번 플랫폼을 섞는 것이다. 지금까지 내 코드 :4 개 위치에서 4 개의 프리 팹을 인스턴스화하고 셔플 링, 유니티 엔진 C#

using UnityEngine; 

public class PlatformCreator : MonoBehaviour { 

public GameObject[] platforms; 
public Transform[] points; 

private void Start() 
{ 

    for (int i = 0; i < points.Length; i++) 
    { 
     Instantiate(platforms[i], points[i].position, Quaternion.identity); 
    } 
} 

} 플랫폼은 이제 항상 같은 순서로 산란 예를 들어

- 핑크, 옐로우, 블루, 퍼플

내가 그들마다 다른 순서로 양산되고 싶지 시간 - 예 : 노란색, 파란색, 자주색, 분홍색. random.range를 사용하여 int 인덱스를 만들려고 시도했지만 무언가를 엉망으로 만들었습니다

+0

은 사용 수를 INT X = Random.Range (0, points.Length) 루프에 대한 다음 포인트 [X] .position 내부 ? – ApolloSoftware

답변

4

배열 대신 포인터를 추가하여 값을 "섞어"사용할 수 있습니다. This에서 셔플 기능을 복용 그래서 당신은 같은 것을 할 수있는, 게시 :

public class PlatformCreator : MonoBehaviour { 

public GameObject[] platforms; 
public List<Transform> points; 

private Random rng; 

public void Shuffle<T>(this IList<T> list) 
{ 
    int n = list.Count; 
    while (n > 1) { 
    n--; 
    int k = rng.Next(n + 1); 
    T value = list[k]; 
    list[k] = list[n]; 
    list[n] = value; 
    } 
} 

private void Start() 
{ 
    rng = new Random(); 
    points.Shuffle(); 
    for (int i = 0; i < points.Count; i++) 
    { 
     Instantiate(platforms[i], points[i].position, Quaternion.identity); 
    } 
} 
} 
+0

points.Length 속성을 목록과 함께 사용할 수 없으므로 불행히도 작동하지 않습니다. 아마도 내가 시도해 볼 수있을거야. 카운트 (점수. 카운트)? int k = rng.Next()와 동일한 문제, Next()를 사용할 수 없어 오류가 발생했습니다. –

+0

예, 죄송합니다. 리스트는 길이가 아닌 카운트를 사용합니다. 업데이트 된 답변. –

+0

오류가 무엇인지 말해 줄 수 있습니까? 나는 당신이 그것을 게시하지 않으면 알 수있는 방법이 없습니다. –