投稿

5月, 2025の投稿を表示しています

AnimationPlayer)フレームオーバーのエラーが出てしまう(ソース保存時のみ)

イメージ
 ゲームの実行中にはエラーが出ず、ソースを保存する時だけ、以下エラーが出ました。   ERROR: scene/2d/sprite_2d.cpp:272 - Index p_coord.x = 4 is out of bounds (hframes = 4). いくつかのsprite2Dに、別々の4フレーム(0番目~3番目のフレーム)のスプライトシートを用意、それをAnimationPlayerで再生していました。 4番目以上のフレームを指定すると、フレームが無いために、上記エラーになります。 しかし、全てのアニメーションをチェックしても、 4番目のフレームの指定は見つからず・・・ また、ゲーム中でそれを再生するとエラーになるはずなのですが、 ゲーム実行中にはエラーになりません・・・ 結果、以下アニメーションreset、にデフォルトで設定される物に、4番目の物がありました。作業中にミスしたものが、resetの箇所には残っていて、それがエラーになったようです。 しかし、ゲーム中はresetのフレームは使用していないので、ゲーム中はエラーが出ないのでした。 resetをあまり活用しておらず、意識していなかったのですが、何かanimation関連であった時は、resetもチェックしたほうが良さそうです。

Y sort enabled) Yソートを有効にしたい2オブジェクトにチェックを入れたのに、機能しない

イメージ
 以下のように、キャラクタ(地蔵(savepoint))の下からプレイヤー(player)が近づくと表に、上から近づくと裏になることで、疑似的な3Dを表現することができます。 これは、インスペクターの、canvasitem>ordering>Y sort enabled、というチェックボックスがあり、互いにチェックを入れれば機能するようになると思っていたのですが・・・ ・下から近づくと表に出る ・上から近づくと裏になる ・以下の一番下の Y sort enabled、を、上記2オブジェクト両方で設定。 しかし、それができませんでした。 一番上のシーン(以下の場合scene6)、のY sort enbled、にもチェックを入れないと、機能しませんでした。 直観的には、ソートしたいプレイヤー(player)と地蔵(savepoint)だけ設定すれば、機能するように思います(その2オブジェクトをY軸でソート、表裏を制御するので)。 しかしなぜか、一番上のシーンも設定しなくてはならない・・・ 以下にも記載されていますが、 https://www.reddit.com/r/godot/comments/vg5xfn/how_does_ysort_work_in_godot_4/?tl=ja 以下文面の印象が強く、両方のオブジェクトのysortを有効にすれば、機能するように思ってしまいました・・・ あなたが直面している問題は、タイルマップのysortを有効にしたけれど、プレイヤーノードが現在ysortされていないことだと思います。

TileMapLayer)特定のタイルの色を、任意のタイミングで変える方法

イメージ
 自分はかなり詰まってしまったため、記載しておきます。 以下のように、キャラクタ(棒人間)が家に入ると、家の壁や屋根が透けて、家の中が見える、というようにしたい、とします。          ↓ 調べると色々記事が出るのですが、tilemapのころの記事が多かったり、直観的にわかりづらいです。 ■スクリプト 以下スクリプトを、半透明にしたいレイヤーにアタッチします。 (_on_area_in_house_1_area_entered、は、キャラクタが戸口に侵入した時のトリガーで実行されます)   extends TileMapLayer var modulated_cells:Dictionary func _ready() -> void: pass func _use_tile_data_runtime_update(coords: Vector2i) -> bool: return modulated_cells.has(coords) func _tile_data_runtime_update(coords: Vector2i, tile_data: TileData) -> void: tile_data.modulate = modulated_cells.get(coords, Color(1, 1, 1, 1)) func _on_area_in_house_1_area_entered(area: Area2D) -> void: if ( (area.name == "DamageBox") and (area.get_parent().editor_description == "MPC")): for x in range (463, 478): for y in range (455, 470): modulated_cells[Vector2i(x, y)] = Color(1, 1, 1, 0.1) notify_runtime_tile_data_update() ■実行タイミングがわかりづらい _use_tile_data_runtime_updateと、 _tile_data_runtime_updateが、どのタイ...

TileMapLayerで、Y座標がマイナス(0より小さい負の値)の範囲では、表示順が逆になってしまう

イメージ
 tilemaplayerでは、例えば、地面のタイルの絵よりも、操作しているキャラクターを表に表示したい、一方、建物の高い箇所は、キャラクターを裏に表示したい、といった事があります。 これは、シーン内のタイルとキャラクタの順序で決められます。 ・タイルの絵であるlayer1より、キャラクタ(棒人間)のplayer、の方が下。 この場合、playerが表に表示されます。 しかし、シーンの原点より上、Y座標がマイナスの値になる位置へ行くと、以下のように、タイルの裏に隠れてしまいます。 ・少し上にキャラクタを移動すると、タイルの裏に隠れてしまう。 ・タイルを非表示にすると、キャラクタがいることがわかる。 ・Y座標がゼロの位置は、以下ピンク色の線。この線より上にキャラクタが入ると、表示順が逆になり、後ろに隠れてしまう。 これはおそらく、インスペクタ>canvasitem>ordering>Y sort enabled、のパラメータのために、Y座標位置も含めて処理する仕組みになっているのかもしれず、それが原因かもしれません。 座標の負の値を考慮しておらず、絶対値で判別してしまい、結果、逆になってしまうのだと思います。 とりあえず、マップを作る際は、Y座標の値がプラスである範囲内のみで作らないといけないのかもしれません・・・