UnityでListの中身をランダムに入れ替えるテクニック

UnityでListの中身をランダムを並び替えるには、
いろいろな方法がありますがLinqを使うのが手っ取り早いです。

Linqを使えば、以下の一文でListの内容をランダムで入れ替えることができます。
$List$ = $List$.OrderBy(a => Guid.NewGuid()).ToList();

※注意点として、名前空間にSystem.LinqとSystemを加えるのはお忘れなく。

以下に使用例として具体的なコードを紹介します。
適当なオブジェクトにこのスクリプトをアタッチし、再生すると、
ログからランダムに入れ替わっていることを確認することができます。

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

public class Example : MonoBehaviour
{

    void Start()
    {
        Shuffle();
    }

    void Shuffle()
    {
        List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
        numbers = numbers.OrderBy(a => Guid.NewGuid()).ToList();

        // シャッフル後の結果を表示
        foreach (int number in numbers)
        {
            Debug.Log(number);
        }
    }
}

タイトルとURLをコピーしました