今回のテーマ
Randomクラスを使ってオブジェクトをランダムな方向にぶっ飛ばす
開発中のゲームで食べ物を飛ばしますので、備忘も兼ねてRandomクラスについて書いていきます。
前回はハンバーガーを垂直に飛ばしましたが、今回はちょっと変化を加えて、ランダムな方向にぶっ飛んでいくようにスクリプトを手直ししていきます。
Randomクラスとは
Randomクラスとは、Unityマニュアル(スクリプトリファレンス)によると
ランダムなデータを生成するためのクラスです。
ゲームを作っていると乱数を使いたい場面がよくあります。例えば、敵を倒してドロップするアイテムが毎回”薬草”よりも、一定確率でレアアイテムがドロップする方が面白いですよね。
今回はRandomクラスのStatic関数である「Range」を使います。
Rangeとは
Rangeは一定範囲の中からランダムな値を出たい時に便利です。
引数に最小値と最大値を指定することで、その範囲内で乱数を抽出してくれます。例えば、10種類あるアイテムの中から、ランダムに1つ選びたい時などに使います。
コードの書き方(例)
例1) Random.Range(最小値, 最大値);
例2) Random.Range(0.0f, 10.0f); // float型は最大値10も含む
例3) Random.Range(0, 10); // int型は0~9で最大値10は含まない
Rangeを使ってハンバーガーを飛ばす
前回はハンバーガーは垂直に飛ばしましたが、それだとイマイチ物足りないので、Rangeを使ってランダムな方向に飛ばしたいと思います。
まずは、最小値と最大値のための変数を用意します。
public class FoodScript : MonoBehaviour
{
bool isHop = true; // ジャンプ済みかを判定するフラグ
[SerializeField] private float min = -3.0f; // ランダムの最小値
[SerializeField] private float max = 3.0f; // ランダムの最大値
}
続いて、Rangeの引数に最大値と最小値を指定してランダムなVector3を生成するようにしましょう。
public class FoodScript : MonoBehaviour
{
bool isHop = true; // ジャンプ済みかを判定するフラグ
[SerializeField] private float min = -3.0f; // ランダムの最小値
[SerializeField] private float max = 3.0f; // ランダムの最大値
void FixedUpdate()
{
if (isHop)
{
isHop = false; // ジャンプした
Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得
Vector3 force = new Vector3(Random.Range(min, max), // X軸
Random.Range(5.0f, 15.0f), // Y軸
Random.Range(min, max)); // Z軸
rb.AddForce(force, ForceMode.Impulse); // 力を加える
}
}
}
これでランダムな方向に飛ばすことに成功しました。
最小値と最大値はインスペクターから範囲を変更可能です。
次回は
次回は飛ばす食べ物を増やして配列に入れたいと思います。
コメント