【Godot】本格的な円形弾幕の作り方

スポンサーリンク
この記事は約3分で読めます。

Godotでのシューティングゲームなどに使える本格的な円形弾幕の作り方について掲載しています。ぜひ参考にしてください。

弾を作る

Bulletというノードを追加する

まずは発射する弾となるBulletというノード追加してください。

ノードArea2Dがおすすめです。

追加したら忘れずに保存しておきましょう。

弾になる四角を追加する

次に、となる四角を追加しましょう。

ColorRect」というノード子ノードとして追加して、size10×10にしてください。

そして、このままだと四角が真ん中に配置されていないので、ColorRectposition-5,-5にしてください。

衝突形状を追加する

次に、当たり判定を出す衝突形状を追加しましょう。

シューティングゲームとして流用しない場合は、追加しなくても構いません。

CollisionShape2D」を追加して、Shapeの項目に「新規RectangleShape」を追加してください。

そして、大きさを10,10にしてください。

これで、衝突形状完成です。

Bulletが発射されたときに進むようにする

次に、Bulletノードに「Bullet.gd」というスクリプトアタッチしてください。

スクリプトアタッチできたら、スクリプトの中に以下のようなコードを書いてください。

extends Area2D

var speed = 100
var velocity = Vector2()

func _process(delta):
	velocity = transform.x * speed
	position += velocity * delta

このコードで、が向いた方向に進むようになります。

弾を発射する

enemyを追加する

次に、弾を発射するノードを追加しましょう。

enemy」というNode2Dシーン追加してください。

追加したら、忘れずに保存しておきましょう。

弾を発射するコードを書く

次に、enemyノードスクリプトをアタッチして、以下のようなコードを書きましょう。

extends Node2D

var angle = 0 #発射角度

const bullet = preload("res://bullet.tscn") #弾を取得

func firing():
	angle = 0
	for i in range(36): #36回繰り返す
		var bullet1 = bullet.instantiate() #弾をインスタンス
		angle += 10 #発射角度をずらす
		bullet1.rotation_degrees = angle #弾の角度をangleにする
		add_child(bullet1) #弾を生成する

Timerを追加する

次に、弾を発射を1秒ごとに発射するために、「Timerノード追加してください。

そして、Timer設定を変更しましょう。

  • Wait Time 1
  • Autostart ON

シグナルを接続する

次に、1秒経ったときにシグナルを送るようにしましょう。

timeout()」というシグナルを接続してください。

そして、以下のようなコードを入力してください。

func _on_timer_timeout():
	firing()

時間が経ったら弾を削除する

弾を削除せずにずっと発射してしまうと、重くなってしまうので、時間が経って画面外に弾が出たら削除するようにしましょう。

Bullet子ノードに、「Timer」ノードを追加してください。

そして、Timerノードを以下のように設定してください。

  • Wait Time 5
  • Autostart ON

これで、生成されてから5秒間をはかるようになります。

そして、5秒が経ったら弾を消すようにしたいので、「timeout()シグナルスクリプトに接続します。

これで、5秒経ったらこのシグナルが送信されるようになります。

そして、シグナルの中に、以下のようなコードを入力しましょう。

func _on_timer_timeout():
	queue_free()

queue_free()」というコードで自身を削除することができます。

実行する

ここまでで円形弾幕完成です。

試しに実行してみましょう。

すると、円形に弾が発射されていると思います。

タイトルとURLをコピーしました