無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、各タイルに独自のカスタムデータを設定した TileSets リソースを使って作成したタイルマップで、キャラのいる場所のタイルのカスタムデータの値を TileData の関数を使って取得する手順とスクリプトを紹介します。
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
前回の記事
前回は、キャラクターが接触しているタイル群を取得するスクリプトの例を紹介しました。
スクリプト
前回の記事では、キャラクターが接触しているタイル群を取得するスクリプトと、そのテスト用の枠を描画する処理を紹介しました。
今回は、それにより得られたタイル群から、カスタムデータを取得する例として、はしごなどの上り下りができるタイルに独自に設定した can_climb bool 型データを取得するスクリプトの例を紹介します。
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
# $GodotSan の当たり判定領域に重なっている $TileMapLayer のタイル群を取得します。
var enterd_tiles: Array[TileData] = get_entered_tiles($TileMapLayer, $GodotSan)
# 昇降可能なタイルに触れているかを確認します。
var can_climb_or = false
for enterd_tile in enterd_tiles:
var can_climb = enterd_tile.get_custom_data("can_climb")
# 現在接触しているタイルのいずれかが昇降可能ならば true になるように論理和をとります。
can_climb_or = can_climb_or or can_climb
# 今回のフレームでの結果を操作キャラクターの変数に設定します。
$GodotSan.can_climb = can_climb_or
ハイライトしている行で呼び出している TileData.get_custom_data 関数で、指定した名前のカスタムデータを取得しています。
get_entered_tiles 自作関数については前回の記事を参照してください。
関連記事
TileMapLayer ノードにマップチップを描画する手順は以下の記事を参照してください。
CharacterBody2D でジャンプ移動するキャラを作る手順は以下の記事を参照してください。
TileSets リソースの各タイルのカスタムデータの設定については以下の記事を参照してください。
デバッグ用の情報を描画する処理
前述の can_climb カスタムデータを取得した処理のテストとして、 can_climb が true の場合にだけキャラクターの頭上に^の緑色のテキストを描画します。
前回の接触していると判定したセル(タイル)に枠を描画する処理のあとの、ハイライトしている行が、そのために追加した処理です。
# 再描画したい場合は queue_redraw 関数を呼び出してください。
func _draw():
# デバッグ用。キャラクターと接触しているセルについて枠を描画します。赤はタイルのあるセルで、青はないセルです。
for draw_info in debug_entered_tile_draw_info_array:
draw_rect(draw_info.rect2, draw_info.color, false, 3, false)
# デバッグ用。キャラクターが昇降可能なタイルに触れている場合は ^ を上部に表示します。
if $GodotSan.can_climb == true:
draw_string(ThemeDB.fallback_font, $GodotSan.global_position + Vector2(0, -8), "^", HORIZONTAL_ALIGNMENT_CENTER, -1, 16, Color.GREEN)
フォントをプロジェクトに追加していない状態で draw_string で文字列を描画する処理については以下の記事を参照してください。
テスト
F5 / F6 キーなどでタイルマップのシーンを実行してキャラクターを操作すると、カスタムデータ can_climb を設定したハシゴのタイルに触れている場合だけ頭上に「^」が表示されました。
これにより、TileData のカスタムデータを正しくタイルから取得していることが確認できました。
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、各タイルに独自のカスタムデータを設定した TileSets リソースを使って作成したタイルマップで、キャラのいる場所のタイルのカスタムデータの値を TileData の関数を使って取得する手順とスクリプトを紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- 【Godot4.x】タイルマップの基本的な使い方 | 2dgames.jp
- 【Godot】コリジョンレイヤーとマスクについて | 2dgames.jp
- Using TileSets — Godot Engine (4.x)の日本語のドキュメント
- TileMapLayer — Godot Engine (4.x)の日本語のドキュメント
- TileData — Godot Engine (4.x)の日本語のドキュメント
記事一覧 → Compota-Soft-Press
コメント