🦔

Godot(v.4.2)の歩き方

2024/02/23に公開

はじめに

こんにちは。ここではGodotでゲーム開発する際に私が検索したGodotのコードを備忘録としてまとめたものを随時更新していきます。
また、基本的なプログラミング言語の説明(例えば、varconstの違いやforの機能など)は取り上げません。最低限の文法の理解は前提としています。

衝突オブジェクト(Collision Object)

Area2D

Area2Dは特定の領域を定義し、その領域に入るか出るかした物体を検出するために使用されます。物理的な反応は持たず、主にゲームのロジックやイベントのトリガーとして機能します。

  • 用途: エリアに基づくイベントトリガー、例えばプレイヤーが特定の領域に入ったときのアクションやアイテムのピックアップ。
  • 特徴: 物理的な挙動を持たず、エリア内の物体に対するイベントトリガーとして機能。

StaticBody2D

StaticBody2Dは動かない物体、例えば地面、壁、障害物などに使用されます。これらは物理的なシミュレーションの影響を受けず、他の動的な物体との衝突を検出することができます。

  • 用途: 固定された障害物、プラットフォーム、壁など。
  • 特徴: 物理的な力(重力、衝突力)の影響を受けず、他の物体との衝突を検出する。

CharacterBody2D

CharacterBody2Dはキャラクターの動きを制御するために特化したノードです。主にプレイヤーキャラクターやNPCなど、特定の物理ルール(ジャンプ、摩擦、衝突など)に従いながらも、細かく調整された動きが必要なエンティティに使用されます。

  • 用途: プレイヤーやNPCのようなキャラクターの動きの制御。
  • 特徴: ジャンプや着地の検出、坂道の歩行、滑り止め処理など、キャラクターの動きに関連する機能が豊富。

RigidBody2D

RigidBody2Dは完全な物理シミュレーションを提供するノードで、重力、摩擦、衝突といった物理的な挙動に従うオブジェクトに適用されます。

  • 用途: 物理法則に従って動く必要があるオブジェクト、例えば落下する岩、跳ねるボールなど。
  • 特徴: 物理法則(重力、摩擦、衝突反応など)に基づいた動きを実現。

ビルトイン関数(仮想関数)

Godotでは_をつけることでビルトイン関数を呼び出すことができます。

_init()

クラスのインスタンスが生成された直後に一度だけ呼び出されるコンストラクタ関数です。例えば、変数の初期値の設定や、オブジェクトの初期状態の設定などを行うことができます。

_process()

ゲームの各フレームごとに呼び出される関数です。deltaパラメータは、前のフレームからの経過時間(秒単位)を示します。この関数は、アニメーションの更新、ユーザー入力の処理、ゲームのロジックの実行など、フレームごとに行う必要のある処理を記述する際に用います。
この関数はシーンツリーの中で常に監視され、ゲームが実行されている間はずっと実行され続けます。
次のコードはチュートリアルで出てくるものですが、定義のみで実行部分は明示されていませんが、この回転運動は正しく動作します。
ちなみにrotationはSprite2Dのプロパティで、_process()内で新しく定義されたわけではありません。

extends Sprite2D

var angular_speed = PI
func _process(delta):
	rotation += angular_speed * delta

_ready()

シーンツリーにノードが追加され、初期化が完了したときに一度だけ呼び出されます。リソースのロードや、他のノードへの参照の取得など、シーンの準備が整った後に必要なコードをここに配置します。

_input(event)

入力イベント(キーボード、マウス、ジョイスティックなど)が発生すると呼び出されます。この関数を使用して、ユーザーのアクションに応じた処理を記述できます。

physics_process(delta)

物理フレームごとに呼び出される関数で、主に物理演算を伴う動作の更新に使用されます。_process(delta)とは異なり、この関数は物理エンジンの更新タイミングに合わせて定期的に呼び出されます。

クラス

GDScriptにおいて、はじめから用意されている組み込み型のクラスはnewを使ってインスタンス化する必要はありません。組み込み型クラスはコンストラクタを通じて直接作成することができます。

https://envader.plus/article/16

Vector2

Vector2はGodot Engineで2次元ベクトルを扱うためのクラスです。
先に述べたようにコンストラクタを通じて直接用いることができるので、Vector2クラスは次のように変数に直接格納することができます。

var v = Vector2(1, 2)

この例では、X成分が1、Y成分が2のベクトルvを定義しています。

単位ベクトル

Vector2には特定の方向を示す定数(単位ベクトル)が用意されています。
Vector2.UPVector2.DOWNVector2.RIGHTVector2.LEFTで、それぞれ上、下、右、左を指す単位ベクトルです。
またVector2.ZEROという定数も存在し、これは(0, 0)を表します。
オブジェクトの速度を初期化したり、リセットしたりする場合によく使用されます。

ベクトルを操作するメソッド

  • length() : ベクトルの大きさ(長さ)を返す
  • normalized() : ベクトルの正規化版(大きさが1の同じ方向のベクトル)を返す
  • angle() : ベクトルの角度(ラジアン単位)を返す
  • rotated(angle) : ベクトルを指定された角度(ラジアン単位)だけ回転させた新しいベクトルを返す

Discussion