Menu
CoddyTech

ランダムに生成

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 68/85。

Random.Range(min, max)は乱数を選び、返される値の範囲は、渡す数値の型によって異なります。floatの場合、minからmaxまでの両端を含む任意の値が返されます。intの場合、max自体は含まれません。そのため、サイコロを振るには1から7を指定します。

int roll = Random.Range(1, 7);   // 1、2、3、4、5、または6
Debug.Log("You rolled " + roll);

int版でmaxが含まれないのは、Random.Range(0, names.Length)が常に有効な配列インデックスになるようにするためです。また、結果をfloatに格納しても、Random.Range(-5, 5)が返すのは-5から4までの整数だけです。その間の任意の値を得るには、Random.Range(-5f, 5f)と書きます。

3D空間の位置や方向には、Unityに2種類のランダムなベクトルが用意されています。Random.insideUnitSphereは、(0, 0, 0)を中心とする半径1の球の内部にあるランダムな点です。Random.onUnitSphereは、その球の表面上にあるランダムな点で、長さ1のランダムな方向を表します。transform.position + Random.insideUnitSphere * 2fは、上下も含め、あらゆる方向に最大2単位離れた位置を表します。

challenge icon

チャレンジ

中級

クリックするたびに、床の上のランダムな場所から木箱が落ちます。

  1. クリック時のifの中で、float x = Random.Range(-4f, 4f);を選び、float zも同じ方法で選びます。
  2. Instantiate(cratePrefab, new Vector3(x, 5, z), Quaternion.identity);を呼び出します。

「プレイ」を押して数回クリックすると、木箱が新しい場所に落ちます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class CrateDropper : MonoBehaviour
{
    public GameObject cratePrefab;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            // ランダムな位置から木箱を落とす: x と z は -4 から 4、y = 5
        }
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド