Godot4.1.3でシューティングゲームを作っていきます。
敵を追加します
twin bodyという名前の敵を1種類追加します。上から下に直進するのみのキャラクターです。
github
本記事で実装したものをgithubで公開しています。
twin bodyのglTF2.0形式ファイルをassetsフォルダに配置
Blenderで敵をモデリングし、twin_body.glbというファイル名で、glTF2.0形式で出力したものを、res://assets/blender/twin_body/twin_body.glbに配置しました。
twin bodyのシーンとGDScriptを作成する
res://characterの下に、enemyフォルダを作成し、その中に「twin_body.scn」シーンを作成します。
ルートノードはArea3Dにします。子ノードは3つあります。
- twin_body
res://assets/blender/twin_body/twin_body.glbをドラッグしたものです。
Scaleを2倍にしました。 - CollisionShape3D
Shapeは新規BosShape3Dにして、x=3m、z=5mにしました。 - VisibleOnScreenNotifier3D
画面外に出たことを検知できるようにしました。
ルートノートにスクリプトをアタッチして、下記のように修正します。
extends Area3D
@export var _d_speed_mps = 20.0
func _physics_process(delta):
global_position += Vector3(0, 0, 1) * _d_speed_mps * delta
func _on_visible_on_screen_notifier_3d_screen_exited():
queue_free()
_physics_processメソッドに、画面の上から下に直進する動きを記述しています。
画面の下はZ軸のプラス方向なので、Zのみ1にしたVector3(0,0,1)を使用します。_d_speed_mpsが1秒あたりに進む速度なので、deltaを掛け算して今周期分の移動量をglobal_positionに足しています。
画面外に出たことを知るには、VisibleOnScreenNotifier3Dのscreen_exitedイベントを受けるようにします。
VisibleOnScreenNotifier3Dを選択して、インスペクタの右のノード/シグナルの中にある、screen_exited()をダブルクリックします。ルートノードのtwin_bodyを選択して接続します。
_on_visible_on_screen_notifier_3d_screen_exitedメソッドの左に矢印アイコンが表示されると、twin_bodyシーンが画面外に出ると本メソッドが呼ばれるので、queue_free()と書けば、シーンが削除されるようになります。
twin_bodyの動作確認
今追加したtwin_bodyの動きを確認するために、一時的にgame.scnにtwin_body.scnを追加して動きを確認します。transform/position.zを-130にして、初期位置を画面の上の方にします。
実行すると、twin_bodyが上の方から下に移動します。
画面外に出ると消えることも確認します。
実行中、シーンのリモートを見ると、画面にいるときは、twin_bodyノードが存在しますが、
twin_Bodyが画面外に出ると、twin_bodyノードが消えます。
以上です。