遊テックプログラミング教室

プログラミングノートNOTE

Unity C# で配列のランダムソート

Unity C# で配列のランダムソート

C#で配列をランダムにソート(=シャッフル)する方法の紹介です。

using〜の2行を追加するのを忘れないようにしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//追加
using System.Linq;//追加

public class Sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] array = { 1, 2, 3, 4, 5};

        //シャッフル
        array = array.OrderBy(x => Guid.NewGuid()).ToArray();

        //コンソールに出力して確認
        for(int i = 0; i < array.Length; i++)
        {
            Debug.Log(array[i]);
        }
    }

}

遊テックプログラミング教室のレッスンでの使用

<生徒向けの情報>

神経衰弱でのトランプの配置に使います。ゲームオブジェクト型の配列を宣言し、各要素にトランプのプレハブを代入し、シャッフルします。

代入はインスペクターから行います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//追加
using System.Linq;//追加

public class GameManager : MonoBehaviour
{
    public GameObject[] cards = new GameObject[6];//カードを入れる配列の宣言

    // Start is called before the first frame update
    void Start()
    {
        //シャッフル
        cards = cards.OrderBy(x => Guid.NewGuid()).ToArray();

        int i = 0;//配列cardsのindex
        for (int yi = 0; yi < 2; yi++)//yi行目
        {
            for (int xi = 0; xi < 3; xi++)//xi列目
            {
                Instantiate(cards[i], new Vector3(-400 + xi * 400, 200 - yi * 400, 0), cards[i].transform.rotation);
                i++;
            }
        }
    }

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

実行毎に配置が変わる。