【Godot】乱数を使って敵をランダムな位置から出現させる

前回、Godotにおける乱数の基本的な使い方について紹介しました。

ここでは、更なる応用編として乱数を使って敵をランダムな位置から出現させる方法について実装してみたいと思います。

アクションゲーム等を作る上で実装する事が多いと思うので、是非参考にしてもらえればと思います。

スポンサーリンク

【Godot】乱数を使って敵をランダムな位置から出現させる

ここでは、Timerノードを使用して敵が一定時間経過後にランダムな場所で生成されるようにし、繰り返す方法について解説したいと思います。

実装手順

まずは、敵用のシーンを生成します。

新規シーンから「Node2D」で作成します。シーン名は「Enemy.tscn」等分かりやすいものにしておきます。ノード名も同様に「Enemy」としておきます。

続いて、敵となるキャラクターとしてとりあえずデフォルトでファイルシステムに含まれているGodotのイメージキャラクター?「icon.svg」を使うことにします。

icon

↑コレですね。

次に、Enemyノードの子ノードとしてSprite2Dノードを作ります。

そして、インスペクターからTextureに「icon.svg」をドラッグ&ドロップします。

Godotプロジェクト

新たにメインシーンを作成します。メインシーンにはNode2Dノードをルートノードとして配置して、ここで敵をランダムに出現させます。シーン名は「main.tscn」とノード名は「main」とします。

まず、メインシーンにTimerノードを追加します。Timerノードは、設定した待ち時間後にシグナルを発信するため、ランダムな敵出現タイミングの制御に利用します。

メインシーンのmainを右クリックで「子ノードの追加」を選択します。

検索バーにTimerと入力し、Timerノードを追加します。

追加したTimerノードの名前を「EnemySpawnTimer」に変更しておくとわかりやすくなります。

メインシーンのmainノードにスクリプトをアタッチして、敵をランダムなタイミングで出現させる処理を記述します。

ルートノード(main)を右クリックして「Attach Script」を選択し、新規スクリプトを作成します。

以下のコードを入力して、スクリプトに敵の出現ロジックを追加します。

コード解説

  • var EnemyScene = preload(“res://Enemy.tscn”)
    • 敵のシーンをメインシーンで使うために読み込んでおきます。preload()関数で事前に読み込むことで、毎回の出現時にファイルを読み込むよりも効率的です。
  • @onready var enemy_spawn_timer = $EnemySpawnTimer
    • Timerノード(EnemySpawnTimer)をスクリプト内で扱えるように、変数にセットします。
  • func set_random_spawn_time()
    • 1〜5秒の範囲でタイマーの待機時間をランダムに設定します。これにより、敵の出現タイミングにランダム性を持たせます。
  • func _on_spawn_enemy()
    • enemy_instance.position = Vector2(randf_range(0, 1024), randf_range(0, 600))で画面内のランダムな座標に敵を配置します。Vector2で位置のXとY座標を設定し、randf_range()でで画面サイズに合わせて範囲を指定しています。
    • 敵が出現するたびにset_random_spawn_time()を呼び出し、次回の出現時間をランダムに設定してタイマーを再開させます。

ここまで出来たら、メインシーンから実行してみます。

すると、こんな感じで指定された範囲内にて1~5秒ごとにランダムな位置から敵が出現するんじゃないかと思います。

著者プロフィール
うんくん

IT系に特化した記事がメインです。(Unity多め。)
Udemy講師もやっています。よろしくお願いします。

※Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

うんくんをフォローする
Godot
スポンサーリンク
シェアする
うんくんをフォローする