Godot Engineで2Dゲームを制作するための備忘録です。
この記事はGeminiを活用して作成しました。
1. はじめに
ゲーム開発では「サイコロを振る」「クリティカルヒットの確率判定」「敵をランダムな位置に出現させる」など 多くの場面でランダムな値が必要になります
GDScriptには標準で使いやすい乱数生成用の関数(メソッド)が用意されており これらを使うことで簡単にゲームへランダム要素を組み込むことができます
用途に合わせて適切な関数を使い分けるのがポイントです
主な用途
- 1から6までのサイコロの目をランダムに決める
- ダメージ数値を「100〜120」の間でばらつかせる
- 2D画面内のランダムな座標(X, Y)にアイテムを出現させる
- ガチャやドロップ率の確率判定(例: 5%の確率でレアアイテム)
2. 代表的な乱数関数(プロパティ・メソッド)
GDScriptで最もよく使われる 代表的な乱数生成の関数(グローバル関数)です
| 関数(メソッド) | 得られる値 | 主な使いどころ |
|---|---|---|
| randi() | 0 から 4,294,967,295 までの整数(int) | 完全なランダム整数が欲しいとき |
| randi_range(from, to) | 指定した範囲(from 〜 to)の整数(int) | サイコロの目(1〜6)やダメージの幅など |
| randf() | 0.0 から 1.0 までの小数(float) | 確率の判定(0.05 = 5%など) |
| randf_range(from, to) | 指定した範囲(from 〜 to)の小数(float) | キャラクターの大きさや速度を微調整するとき |
| randfn(mean, deviation) | 正規分布(平均値の近くが出やすい)に基づいた小数 | リアルなステータスのばらつきなど |
3. 超重要:乱数の初期化(シード値のリセット)
Godot 4では明示的な初期化(randomize() の呼び出し)は原則として不要です。
Godot 4以降、エンジンの起動時に自動的にランダムなシード値が設定されるため、何もしなくても毎回異なる乱数が生成されます。
明示的に初期化を行いたい場合
ゲームの起動時(メインシーンの _ready() など)で randomize() 関数を一度だけ実行します
func _ready():
# 起動するたびに異なる乱数パターン(シード値)を時間ベースで生成する
randomize()