コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】豊富な乱数アルゴリズムを使用できる「UnityRandom」紹介

はじめに

「UnityRandom」を Unity プロジェクトに導入することで
豊富な乱数アルゴリズムを使用できるようになります

使用例

using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        // 初期化
        var urand = new UnityRandom();

        // 初期化(シード値指定)
        //var urand = new UnityRandom( 123456 );

        // 0 - 1
        print( urand.Value() );

        // 1 - 100
        print( urand.Range( 1, 100 ) );

        // ポアソン分布
        print( urand.Possion( 5 ) );

        // 指数分布
        print( urand.Exponential( 5 ) );

        // ガンマ分布
        print( urand.Gamma( 5 ) );

        // L = 1 の正方形の中のランダムな Vector2 の点
        print( urand.PointInASquare() );

        // R = 1 の円の中のランダムな Vector2 の点
        print( urand.PointInACircle() );

        // R = 1 のディスクの中のランダムな Vector2 の点
        print( urand.PointInADisk() );

        // L = 1 の立方体の中のランダムな Vector3 の点
        print( urand.PointInACube() );

        // L = 1 の立方体の表面のランダムな Vector3 の点
        print( urand.PointOnACube() );

        // R = 1 の球体の中のランダムな Vector3 の点
        print( urand.PointInASphere() );

        // R = 1 の球体の表面のランダムな Vector3 の点
        print( urand.PointOnASphere() );

        // ランダムな色
        print( urand.Rainbow() );

        // ダイスロール
        print( urand.RollDice( 2, URandom.DiceRoll.DiceType.D6 ) );

        // ランダムに並べ替えたリストから順に取得
        var shufflebag = new float[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        var thebag1 = urand.ShuffleBag( shufflebag );
        print( thebag1.Next() );

        // ランダムに並べ替えたリストから順に取得(ウェイト指定)
        var wshufflebag = new Dictionary<float,int>
        {
            { 1, 5 },
            { 2, 45 },
            { 3, 25 },
            { 4, 25 },
        };
        var thebag2 = urand.ShuffleBag( wshufflebag );
        print( thebag2.Next() );
    }
}