敵は、ゲームをエキサイティングでプレイヤーにとってやりがいのあるものにするために重要な役割を果たします。2D プラットフォーマー、トップダウン シューティング、ロールプレイング ゲームのいずれを作成する場合でも、敵を追加することでゲームプレイの体験を大幅に向上させることができます。
Godot のユーザーフレンドリーなインターフェースと直感的なスクリプティング言語である GDScript により、プロセスを効率的かつ楽しくすることができます。
Godot ゲームの設定
敵の作成に没頭する前に、Godot ゲームエンジンで 2D ゲームの基本構造を設定します。
Godot で新しい 2D プロジェクトを作成します。メインシーンで、新しいKinematicBody2Dノードを作成してPlayerという名前を付けます。プレイヤーノード内で、長方形の形状を持つCollisionShape2Dを追加します。これはプレイヤーのヒットボックスになります。また、プレイヤーキャラクターの視覚的な表現としてSpriteノードを追加します。
この記事で使用されているコードはこの GitHub リポジトリで入手でき、MIT ライセンスの下で自由に使用できます。
基本的な移動を可能にするために、次の GDScript コードをPlayerノードにアタッチします。
extends KinematicBody2D const SPEED = 200 func _physics_process(delta): var motion = Vector2.ZERO if Input.is_action_pressed("ui_right"): motion.x += SPEED if Input.is_action_pressed("ui_left"): motion.x -= SPEED if Input.is_action_pressed("ui_down"): motion.y += SPEED if Input.is_action_pressed("ui_up"): motion.y -= SPEED motion = move_and_slide(motion)
このコードを使用すると、プレイヤーは矢印キーまたは WASD キーを使用して左右上下に移動できます。
単純な敵の作成
プレイヤーキャラクターの設定が完了したら、単純な敵を作成できます。
新しいシーンを作成し、StaticBody2Dノードを追加してEnemyという名前を付けます。Enemy ノード内で、敵のヒットボックスを定義するために円形の形状を持つCollisionShape2Dノードを追加します。また、敵を視覚的に表現するためにSpriteノードを追加します。
衝突が設定されると、敵はゲームの世界のプレイヤーや他の要素と相互作用する準備が整います。
プレイヤーを追跡する敵の作成
プレイヤーを追跡する敵を作成すると、ゲームに新しいレベルの課題が追加されます。
次のタイプの敵の新しいシーンを作成し、CollisionShape2D を持つKinematicBody2Dノードを追加してFollowEnemyという名前を付けます。プレイヤーを追跡できるように、次の GDScript コードを FollowEnemy ノードにアタッチします。
extends KinematicBody2D const SPEED = 100 func _physics_process(delta): var player = get_parent().get_node("Player") var player_position = player.global_position var enemy_position = global_position var direction = player_position - enemy_position direction = direction.normalized() var motion = direction * SPEED * delta move_and_collide(motion)
これで、FollowEnemyは各フレームでプレイヤーの位置に向かって移動します。
敵の弾の追加
これで、敵がプレイヤーに向かって弾を発射させることができます。新しいシーンを作成してBullet.tscnという名前を付けます。シーンにKinematicBody2Dノードを追加します。Bullet.tscn シーンの KinematicBody2D ノードにBullet.gdスクリプトをアタッチします。Bullet クラスを定義するために、次のコードを追加します。
extends KinematicBody2D const BULLET_SPEED = 300 var bullet_direction = Vector2.ZERO func _physics_process(delta): var motion = bullet_direction * BULLET_SPEED * delta move_and_collide(motion) func set_direction(direction): bullet_direction = direction.normalized()
次に、弾丸を発射する敵の新しいノードを作成して、ShootingEnemyという名前を付けます。ShootingEnemy ノード内で、ヒットボックスとして長方形の形状を持つCollisionShape2Dノードを追加します。
敵に弾を発射させるために、次の GDScript コードを ShootingEnemy ノードにアタッチします。
extends KinematicBody2D const SPEED = 100 const SHOOT_DELAY = 1.5 var shoot_timer = SHOOT_DELAY # Bullet シーンをインポート const BulletScene = preload("res://Bullet.tscn") func _physics_process(delta): # 発射ロジック shoot_timer -= delta if shoot_timer <= 0: shoot_timer = SHOOT_DELAY var bullet_instance = BulletScene.instance() bullet_instance.global_position = global_position bullet_instance.set_direction(direction) get_parent().add_child(bullet_instance)
敵はプレイヤーの位置に向かって定期的に弾を発射するようになります。shoot_timerが 0 未満かどうかを確認するために条件付きifステートメントを使用します。0 未満の場合は、弾を発射します。
ランダムに移動する敵
プレイヤーを追跡したり、プレイヤーに向かって発射したりする敵に加えて、ランダムに移動する敵はゲームに予測不可能さと課題の要素を注入することができます。ランダムな移動パターンを持つ敵を作成するには、単純なロジックと乱数の生成を組み合わせる必要があります。
まず、新しいシーンを作成してKinematicBody2Dノードを追加し、RandomEnemyという名前を付けます。RandomEnemy.gdという名前の新しいスクリプトを作成して RandomEnemy ノードにアタッチします。スクリプトはランダムな移動ロジックを処理します。
extends KinematicBody2D const MOVE_SPEED = 100 const MOVE_INTERVAL_MIN = 1.0 const MOVE_INTERVAL_MAX = 3.0 var move_timer = 0.0 var move_interval = 0.0 var move_direction = Vector2.ZERO func _ready(): choose_new_direction() func choose_new_direction(): move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX) move_timer = move_interval move_direction = Vector2(randf(), randf()).normalized() func _physics_process(delta): move_timer -= delta if move_timer <= 0.0: choose_new_direction() var motion = move_direction * MOVE_SPEED * delta move_and_collide(motion)
追加機能の追加
ゲームプレイをより面白くするために敵に追加できる機能は他にもたくさんあります。
ボスバトル
ボスバトルはゲームのクライマックスであり、プレイヤーのスキルと忍耐力をテストする記憶に残る挑戦的な遭遇を提供します。ボス敵は通常、通常の敵よりも大きく強力で、プレイヤーはそれらを倒すために特定の戦略と戦術を採用する必要があります。
動的な敵のスポーン
プレイヤーのパフォーマンス、場所、またはゲーム内のイベントに基づいて敵の遭遇を調整する動的なスポーンシステムを実装します。これにより、より応答性が高くパーソナライズされたゲームプレイ体験が作成されます。
環境適応
飛んだり、泳いだり、壁を登ったりできる敵など、環境に適応できる敵を作成します。この多様性により、新しいゲームプレイの可能性が開かれ、プレイヤーはさまざまな地形をナビゲートするよう求められます。
敵の弱点と耐性
敵に特定の弱点と耐性を割り当て、プレイヤーにさまざまなアプローチと戦術を試すことを奨励します。一部の敵は特定の攻撃や要素に対して脆弱である可能性がある一方で、他の敵は免疫または耐性があります。
敵のカスタマイズと行動のバリエーション
敵にランダム化された行動のバリエーションを与えることで、予測不可能性のレベルを追加します。たとえば、敵は異なるプレイで異なる攻撃パターンや移動速度を持つ可能性があり、ゲームプレイを新鮮でリプレイ可能に保ちます。
これらの追加機能をいくつか含めることで、ゲームの敵のデザインを充実させ、プレイヤーにとって各遭遇がユニークで記憶に残るものにすることができます。
新しいメカニズムを導入することはエキサイティングなことですが、ゲーム全体のデザインの中でバランスと一貫性を維持することが重要です。
敵を作成するためのベストプラクティス
Godot ゲームで敵を作成するときは、次のベストプラクティスを考慮してください。
明確なビジュアルコミュニケーション
敵を環境から際立たせる明確な敵のデザインを使用して、敵を簡単に認識できるようにします。
敵の種類を区別するために、カラーコーディングまたはユニークなシルエットを使用することを検討してください。敵のアニメーションと視覚効果が、敵の行動と攻撃を強化していることを確認してください。
難易度のバランス
プレイヤーがゲームを進めるにつれて、徐々に複雑さが増していく敵を導入します。さまざまなスキルレベルのプレイヤーと敵の遭遇をテストして、すべてのプレイヤーに適したチャレンジであることを確認します。プレイヤーをいら立たせる可能性のある突然の難易度の急上昇は避けてください。
安っぽい攻撃の回避
プレイヤーがかわしたりブロックできる攻撃で敵をデザインして、プレイヤーに反応する機会を与えます。敵の攻撃に公平なヒットボックスを使用し、視覚表現を超えてヒットする攻撃は避けてください。危険な攻撃を示唆するために警告サインまたは合図を使用します。
プレイテストとイテレーション
開発中に定期的に敵の遭遇をテストして、その楽しさと難易度を評価します。プレイヤーからフィードバックを収集し、それを使用して敵の行動、強さ、弱点を微調整します。
効果音
効果音は、没入型で魅力的なゲーム環境を作成する上で重要な役割を果たします。敵がヒットすると、著作権フリーの適切な効果音を追加して、戦闘でのインパクトとエンゲージメントの感覚を強化します。
攻撃の種類や敵の特性に応じて、各ストライクまたはヒットに異なるオーディオキューを伴うことができます。
敵で Godot ゲームをより魅力的にする
敵は多くのゲームの基本的な要素であり、チャレンジ、障害、そして倒したときの達成感を与えます。さまざまな行動、ヘルスポイント、射撃メカニズムを持つさまざまなタイプの敵を追加することで、プレイヤーに多様で魅力的なゲームプレイ体験を作成できます。
難易度をバランスさせ、視覚的および聴覚的なフィードバックを提供し、敵を徹底的にテストして、プレイヤーに楽しくやりがいのあるゲーム体験を提供することを忘れないでください。
コメントする