マップエディタを作る(Part.2)
2025/03/05
Godot Engine version 4.4 stable
作成者:ダイギイン(アクシオン管理人)

※クリックで拡大

はじめに

タイルマップレイヤーに対するセーブ・ロード機能をプラグインにして下ドックに追加しようと思います。
プラグインを登録した後、その中身を作っていきます。
今回の肝はタイルマップレイヤーのノードをエディタの今のシーンから取得する方法です。


目次


プラグインの登録

"プロジェクト設定"ウィンドウの上部から"プラグイン"を選択します。(fig.1)
次に"新しいプラグインの作成"ボタンを押します。
次にプラグインの登録を行います。この記事での名前は"MapControl"とします。(fig.2)


fig.1 プロジェクト設定ウィンドウ
※クリックで拡大

fig.2 プラグインの作成ウィンドウ

前回のシーンの位置の変更

"Part.1"で作成したセーブ&ロード機能のシーンとスクリプト(map_control.tscn, map_control.gd)を、
先ほど作成したプラグインのフォルダへ移動します。(fig.3)


fig.3 スクリプトの移動

スクリプト名の変更

"map_control.gd"スクリプトはプラグインの本体にあたるのでスクリプト名を変更しておきましょう。(fig.4)
当記事では"map_control_body.gd"とします。


fig.4 スクリプト名の変更

プラグインのスクリプト

プラグインのスクリプト"MapControl.gd"の中身を
マップコントロールのシーンを下部ドックに追加されるように変更します。(Script.1)

※ MapControl.gd

Script.1 プラグインのスクリプト

<Button> add_control_to_bottom_panel(control 追加するシーン,String ドック内の表示名)

用途:下部ドックにシーンを追加します。

<Button> remove_control_from_bottom_panel(control 削除するシーン)

用途:下部ドックから指定したシーンを削除します。

シーン本体のスクリプト

"map_control_body.gd"スクリプトをプラグイン用に変更していきます。(Script.2)

※ map_control_body.gd

Script.2 シーン本体のスクリプト

<SceneTree> get_tree()

用途:実行中のシーンツリーを取得します。

edited_scene_rootオプションでシーンのルートノードを取得します。

<Node> get_child(int 子シーンのインデックス, include_internal = false)

用途:子シーンを取得します。
シーンツリーの上に行くほどインデックスが若くなります。

<Vector2i> get_cell_atlas_coords(Vector2i Vector2i アトラスコードの座標)

用途:タイルマップレイヤーの指定した場所のアトラスコードを取得します。

<Void> set_cell(Vector2i 座標, int タイルセットのインデックス, Vector2i タイルセットのアトラス座標)

用途:指定した座標に任意のアトラスコード(マップタイル)を登録します。

ここまででエラーがなければ次の項目に進みます。

プロジェクトの再読み込み

プラグインを反映させるためにプロジェクトを読み込みなおします。(fig.5)


fig.5 プロジェクトの再読み込み

再読み込みが終わったら、下部ドックに"MapControl"が追加されているか確認しましょう。(fig.6)

fig.6 MapControl
※クリックで拡大

おわりに

動作確認をしてみて、上手いことできたでしょうか?
"Godot v4.3"から"TileMap"ノードが非推奨となったことによりメソッドの覚えなおしをしました。
メソッドの引数が簡略化された一方、レイヤが増えるとコードも増えてしまうのでは?とも感じました。
そこは、慣れが追いつくのを待つしかないなと思います。

今回の記事はここまでとなります。
最後までお読みいただきありがとうございました。

参考

当記事は以下のサイトの記事を参考にしています。
作者の皆様、本当にありがとうございました。

Godot Engine 4.4の日本語のドキュメント TileMapLayer
https://docs.godotengine.org/ja/4.x/classes/class_tilemaplayer.html

ページトップ