Godot4のTileMapでセルを動的に変更したい!
概要
今回の記事では、Godot4のTileMapでセルを動的に変更する手順を掲載する。
仕様書
環境
- Gogot 4.2.1
手順書
まず、TileSet
とTileMap
の座標について簡単に説明してから、本題のセルを動的に変更する手順について説明する。
TileSet
とTileMap
の座標
こんな感じのレトロな8x8のTileSet
をサンプルとして作った。
座標が左上から始まって0
から数える。
コードで座標をするにはVector2i
を使う。第1引数がX軸、第2引数がY軸。
サンプルのTileSet
の階段の座標を設定する例。
Vector2i(7, 4)
セルを動的に変更する
ui_accept(Enter)
の入力があると扉を開閉、ui_cancel(ESC)
の入力があると扉の座標のTileMapを削除(null
に)する例。
extends TileMap
var is_closed:bool = true
func _input(event):
if event.is_action_pressed("ui_accept"):
if is_closed:
set_cell(0, Vector2i(6, 4), 0, Vector2i(0, 0))
is_closed = false
else:
set_cell(0, Vector2i(6, 4), 0, Vector2i(5, 7))
is_closed = true
if event.is_action_pressed("ui_cancel"):
set_cell(0, Vector2i(6, 4), 0, Vector2i(-1, -1))
TileMap
のセルの値を設定してる部分。
set_cell(0, Vector2i(6, 4), 0, Vector2i(0, 0))
第1引数はTileMap
のID、第2引数は値を取得するTileMap
の座標、第3引数はTileSet
のID、第4引数は値を取得するTileSet
の座標。
下記のような感じでTileSet
の座標を-1
にするとTileMap
の指定した座標の値を削除する。null
にする感じ。
set_cell(0, Vector2i(6, 4), 0, Vector2i(-1, -1))
最初は扉が閉まってる状態から始まる。
ui_accept(Enter)
の入力があると扉が空き
もう一度ui_accept(Enter)
の入力があると扉が閉まる。
ui_cancel(ESC)
の入力があると問答無用で扉の座標を削除する。背景色の灰色が表示される感じ。
まとめ(感想文)
レトロゲーム風なのを作れそうな感じ。