【2D】Godotで作るプラットフォームゲームの基本

Gobot

【2D】Godotで作るプラットフォームゲームの基本

はじめに

本ドキュメントは、ゲームエンジンGodotを用いた2Dプラットフォームゲームの基本的な作り方について解説します。プラットフォームゲームは、プレイヤーキャラクターを操作して、ジャンプや移動を駆使してステージを進むジャンルのゲームです。このドキュメントでは、Godotの基本的な機能を用いて、キャラクターの移動、ジャンプ、ステージの構築、敵キャラクターの配置といった、プラットフォームゲームの根幹となる要素を実装する方法を説明します。Godotはオープンソースで無償で利用できるため、個人開発者や小規模チームにとって非常に強力なツールとなります。

Godotエンジンの概要

Godot Engineは、2Dおよび3Dゲーム開発に対応したクロスプラットフォームなゲームエンジンです。シーンベースのアーキテクチャを採用しており、各要素を「ノード」として階層的に管理します。このノードシステムにより、直感的で効率的なゲーム開発が可能になります。また、GDScriptというPythonライクなスクリプト言語をはじめ、C#などの言語にも対応しています。本ドキュメントでは、GDScriptを中心に解説を進めます。

プロジェクトのセットアップ

新規プロジェクトの作成

Godotを起動し、「新規プロジェクト」を選択します。プロジェクト名と保存場所を指定し、レンダラーを選択します。(通常は「Forward+」または「Mobile」で問題ありません)。これにより、開発を開始するための基本的なプロジェクト構造が作成されます。

アセットの準備

ゲームに使用する画像(スプライト)、サウンドエフェクト、BGMなどのアセットを準備します。これらのアセットは、Godotのエクスプローラーパネルにドラッグ&ドロップすることでプロジェクトに追加できます。

キャラクターの作成と制御

プレイヤーシーンの作成

プラットフォームゲームの核となるプレイヤーキャラクターのシーンを作成します。

  • ノード構造:

    • KinematicBody2D: キャラクターの物理演算と移動を管理するノード。
    • Sprite: キャラクターの見た目を表示するノード。
    • CollisionShape2D: キャラクターの当たり判定を定義するノード。
    • Camera2D: プレイヤーを追従させるカメラ。

プレイヤーの移動処理

GDScriptを用いて、キーボード入力に応じたプレイヤーの移動処理を実装します。

  • 左右移動: Input.is_action_pressed("move_left") および Input.is_action_pressed("move_right") のような入力アクションを定義し、velocity.x を操作します。
  • ジャンプ: Input.is_action_just_pressed("jump") を用いてジャンプ入力を検知し、velocity.y に負の値を加算します。重力の影響も考慮する必要があります。
  • move_and_slide(): KinematicBody2D に備わっているこの関数は、指定した速度で移動し、壁や床との衝突を自動的に処理してくれます。

アニメーションの実装

プレイヤーキャラクターの移動やジャンプに合わせて、アニメーションを切り替えることで、ゲームに生命感を与えます。

  • AnimationPlayer ノード: キャラクターのSpriteノードにアタッチし、アニメーションを作成・管理します。
  • アニメーションの切り替え: スクリプトからAnimationPlayerplay()メソッドを呼び出し、現在の状態(静止、歩行、ジャンプなど)に応じて適切なアニメーションを再生します。

ステージの構築

タイルマップの使用

プラットフォームゲームのステージは、タイルセットを使用して効率的に構築するのが一般的です。

  • TileMap ノード: 2Dのグリッドベースでステージを配置するためのノードです。
  • タイルセットの作成: ゲームに使用するタイル(地面、壁、足場など)をまとめたタイルセットを作成します。
  • ステージのペイント: TileMapノード上で、作成したタイルセットを使用してステージを「ペイント」していきます。

コリジョン(当たり判定)の設定

TileMapで配置したタイルに当たり判定を設定することで、プレイヤーキャラクターが地面や壁に衝突できるようになります。

  • タイルのコリジョン設定: タイルセットエディタで、各タイルの形状や物理的なプロパティ(例: 当たり判定を持つかどうか)を設定します。

敵キャラクターの作成とAI

敵キャラクターシーンの作成

プレイヤーと同様に、敵キャラクターも独自のシーンとして作成します。

  • ノード構造: KinematicBody2D(またはCharacterBody2D)、SpriteCollisionShape2Dなどが基本となります。

基本的な敵AI

敵キャラクターに簡単な行動パターン(AI)を実装します。

  • 左右移動: 特定の範囲内を往復するように移動させます。壁にぶつかったら進行方向を変えるといった処理を加えます。
  • プレイヤーの追跡: プレイヤーが一定範囲内に入ったら、プレイヤーに向かって移動するようにします。
  • 攻撃: プレイヤーに接触したらダメージを与える、または攻撃アニメーションを再生するなどの処理を実装します。

その他の要素

アイテムと収集要素

コインやパワーアップアイテムなどを配置し、プレイヤーが収集できるようにします。

  • アイテムノード: Area2Dノードを使用し、プレイヤーとの接触を検知してアイテムを収集する処理を実装します。

UI(ユーザーインターフェース)

スコア、ライフ、ゲームオーバー画面などのUI要素を実装します。

  • Control ノード: UI要素の基盤となるノード群です。Label(テキスト表示)、TextureRect(画像表示)などを使用します。

サウンドとBGM

効果音やBGMを追加して、ゲームの没入感を高めます。

  • AudioStreamPlayer ノード: サウンドエフェクトやBGMの再生に使用します。

まとめ

本ドキュメントでは、Godotを用いて2Dプラットフォームゲームを作成するための基本的な手順を解説しました。キャラクターの移動やジャンプ、ステージの構築、敵キャラクターの配置といったコアな要素の実装方法について触れました。GodotのノードシステムとGDScriptを理解することで、これらの要素を柔軟に組み合わせ、独自のプラットフォームゲームを開発することが可能です。ここからさらに、より複雑なギミック、敵の多様化、レベルデザインの深化など、様々な要素を追加していくことで、より魅力的なゲームへと発展させることができます。