有意義なサイト作りのためJavaScriptを使ってます。ご了承ください。

Godot古参になりたいので学習日記1

 ·   ·  ☕ 3 分で読めます

教科書

さくさく理解する Godot 入門

環境

  • OS:Windows 11
  • Godot Ver:v4.0.beta1.official 20d667284

本文

予言!!Godot!!!次!!!くる!!!!!!

なんと4か月ぶりの本館更新ですが、今後も本館はこんな感じで超まばら更新となる予定となります。生存確認は別館よりどうぞ(百合【GirlsLove】とか注意)。別館って何だっけ

ということで今回のお題はGodotです。オープンソースのゲームエンジンなのですがハチャメチャに多機能かつ使いやすく、パフォーマンスもGodot4で本領発揮。本当にゲーム開発が民主化してしまいました。
海外ではもうメジャーのようですが日本だとまだブレイク前みたいです。が絶対に次に来ます。早く(入門)しろーっ!!!間に合わなくなってもry

そんなわけでGodotで1作作って古参になって威張りたいという不純な動機で入門させていただきました。
本当はRTSが作りたいのですが8時間ほど触り何がわからんのかもわからん状態になり即挫折。まずSTGを1作作ってゲーム作成自体のノウハウを学ぶことにしました。
神に!俺はなる!!!(予定)

とりあえずはろーわーるど

プログラミング学習は何はなくともHello Worldからなのですが、早くリリィしたい記事を分割して面倒になりませんように衝突判定とHelloWorldを一緒にやっちゃいます。

キーマップ作成

プロジェクト設定からインプットマップでキーマップを作ります。多分説明いらないですね(手抜き)

ノードを作ろう

Godotの(Unityでいう)GameObjectにあたるものはNodeと呼ばれます。ルートノードをNode2D、子ノードにCharacterBody2DとStaticBody2Dを配置、そしてこうします。

image1

ルートノードに以下スクリプトを置きます。

1
2
3
4
5
6
7
extends Node2D
const MOVE_UNIT = 4
func _physics_process(delta):
	var dx = int(Input.is_action_pressed("right_move")) - int(Input.is_action_pressed("left_move"))
	var dy = int(Input.is_action_pressed("down_move")) - int(Input.is_action_pressed("up_move"))
	if dx != 0 || dy != 0:
		$CharacterBody2d.move_and_collide(Vector2(dx, dy) * MOVE_UNIT)

_physics_processは物理ボディをオーバーライドするデフォルト関数。フレームレート非依存の連続更新関数ですね。UnityでいうUpdateだと思います。たぶん。間違ってたらごめん。
Input.is_action_pressedは「ボタンが押されていれば1を、そうでなければ0」を返します。これを変数に入れてVector2に渡し、move_and_collideの動く向きにほいっとします。ちょっとトリッキーですが公式サンプルに書いてあったそうなので。
move_and_collideはオブジェクトを動かし、衝突したらtrueを返して跳ね返ります。

配下のSprite2D&ColorRectとCollisionShapeは衝突判定形状ですね。
CollisionShapeのインスペクターでShapeからRectrangleを作ってオブジェクトの形に合わせます。

全部やっちゃった

ということで「移動キャラが衝突するとコンソールに『Hello World!』する雑横着スクリプト」がこちら。

1
2
3
4
5
6
7
8
9
extends Node2D
const MOVE_UNIT = 4
func _physics_process(delta):
	var dx = int(Input.is_action_pressed("right_move")) - int(Input.is_action_pressed("left_move"))
	var dy = int(Input.is_action_pressed("down_move")) - int(Input.is_action_pressed("up_move"))
	if dx != 0 || dy != 0:
		var collision = $CharacterBody2d.move_and_collide(Vector2(dx, dy) * MOVE_UNIT)
		if collision:
			print("Hello World!")

完走した感想

はちゃめちゃに使いやすいです。
スクリプト言語がひたすらによくできています。もうゲーム作るのでプログラミング学習ができまくること必至。
Unityむずいよーな方はぜひこれを。病みつきになりますマジで。

シェアはこちら:

ふらもん
書いた人:
ふらもん
ゲームクリエイター見習い。リンクは別館の制作・攻略サイト