投稿

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

PointLight2D, Canvas Modulate)エリアの一部のみ暗くする方法

イメージ
■シーン全体を暗くする通常の場合 シーン全体をcanvas modulateで暗くして、PointLight2Dをプレイヤーに持たせて、 以下のように暗いエリアを光で照らしながら探索する、ということができます。 ・以下のように真ん中がプレイヤー、光がプレイヤーの前方に出るようにしたい ・エリアのシーンにcanvas modulateノードを追加 ・追加したcanvas modulateノードのcolorを編集、どの程度暗くするか決める ・PointLight2Dはプレイヤーのシーンにノードとして追加。 プレイヤーの向きに合わせてライトの位置を調整。 (作りたい光の画像を作成、textureで読み込みます。) ・画像はacepriteというドット絵作成ツールで作りました。 (①:gradient toolを選ぶ/②radial gradientを選ぶ/③背景色設定をクリック/④を透明(R,G,B,Aすべて0)にする/⑤光の色を選ぶ(ここでは白)/⑥ドラッグして円形の光を作成) ■一部エリアのみ暗くする方法 しかし、canvas modulateはどのようにシーン内に配置しても、結局シーン全体に影響するようで、例えば一部の部屋だけ暗くする、といったことができません。 それを行いたく、以下の部屋の壁を透明にする方法を応用して、colorのRGBの部分を0.3にする、として、暗くしてみました。 https://godot-biginner.blogspot.com/2025/05/tilemaplayer.html ただ、どうも光への反応が悪く、照らした箇所が少しは明るくなるのですが、canvas modulateと比べると暗く、わかりづらいライトになってしまいました。この方法は却下。 良い方法が思いつかず、調べると以下情報が見つかりました。 明るいライトだけでなく、暗くするライトも設定できるようで、それを使うと良いようです。 https://www.reddit.com/r/godot/comments/vnnc4v/can_canvas_modulate_be_used_only_on_one_portion/?tl=ja ・PointLight2Dのインスペクタの、Blend Modeを、subtract(引き算)に設定すると、  暗くするライトになる ・以下暗くした...

CharacterBody2D, StaticBody2D)エリアの衝突(collision)の有無を、objectの組み合わせごとに分けたい

イメージ
以下のように落とし穴を作成してみました。 落とし穴では、以下のようにオブジェクトごとに挙動を変えたいです。 ・プレイヤー: 落下エリアに侵入できる。(侵入すると、プレイヤーの落下モーションを再生。プレイヤーは1個下の階の絵を描いたシーン内の別の位置に移動、落下ダメージを受ける。) ・敵: 落下エリアに侵入できない。(敵は落下エリアを避ける(衝突する)) ・赤い四角形の部位が落下エリア。 CharacterBody2DやStaticBody2Dには、collision layer(所属レイヤー), collision mask(衝突対象のレイヤー)、という設定がインスペクターに有り、それを衝突対象のオブジェクトごとに設定変更することで、衝突の有無を変更できます。 ただ、area2Dにはこの設定値が無いため、上記CollisionPolygon2Dの親に、staticBody2Dを配置、StaticBody2Dのcollision layer, collision maskの設定を変更します。 ・以下”CS”は落とし穴のCollisionPolygon2D、その親の”EnemyStop_3”は、collision layer, collision maskを設定できるstaticBody2D。 ・落とし穴の、staticBody2Dのcollision設定。 両方2、としておく。 ・敵のCharacterBody2Dのcollision設定。 1は、プレイヤーや通常の衝突エリアとの衝突。 2は、落とし穴との衝突。 ・プレイヤーのCharacterBody2Dのcollision設定。 1で敵や、通常の衝突エリアと衝突。 2は設定しないので、落とし穴には衝突しない。 また、例えば、layerを1,maskを2,とすれば、layer2の物と衝突するが、1の物とは衝突しない。また、他の物のmaskで1,と設定されていたら、それとは衝突する、のように、細かく分けていくことができます。 上記のようなことを知らなかったので、攻撃の当たり判定では、以下のように、エリアの名称や、editor descriptionに記入する文字にルールを設け、それを元に直打ちの分岐で衝突対象を分別していました。知っていればcollisionの設定変更だけで対応できたのに・・・、と少し後悔。

aceprite)画像全体の透明度の調整

イメージ
 godotとは直接は関係ありませんが、ゲーム内のドット絵を、aceprite、というソフトで作成しています。 このソフトはレイヤーと、フレームを各々分けて画像を作成できるため、ゲームのような動きのある複雑なドット絵を作るのに、適しています。 ところで、敵が消える、等の際、徐々に透明にしたい演出があるのですが、その際、画像全体の透明度を変更して、50%⇒25%・・・、と、徐々に透明にしたいです。 これまでは、以下のようにreplace color (色を置換する)、の機能を使って、画像中の各色の透明度を設定しなおしていましたが、色の種類が増えると、かなり大変でした。 今日見つけたのですが、画像全体(セル:特定のレイヤー・フレーム)を下部のtimelineウインドウで選択、右クリックで選択できるセルプロパティから、画像全体の透明度を一括で調整できました。 これでまた、作業が楽になりそうです。

AnimationPlayer) トラック内の要素をコピペできる

イメージ
 animationの再生や、それに伴うスピードや衝突エリアのon/offを行うため、AnimationPlayerノードを使っています。 その際、以下のように、作った後に編集しなおしたり、同じ内容を別のタイミングに追加したい場合があります。 これまでは、最初の編集時同様、そのタイミングを選んで、SPRITE2Dのインスペクタからframe_coordを追加したり、右クリックでキーを挿入後、値を変更したりしていました。 しかし、以下のようにコピペできることに気が付きました。 また、以下のようにまとめて選択、貼り付けすることもできました。 コピペすると、これまでより作業効率が上がりそうです。 (v4.4.1.stable.official [49a5bc7b6])