照明

なぜライトはテクスチャや他のオブジェクトには影響するのに、プレイヤーには影響しないのでしょうか?ファンはオブジェクトであり、キャラクターのライトと天井のライトの両方によって照らされています。両者は同じライトマスク設定を持っていますが、キャラクターには影響していません…:man_shrugging:

Z 最小範囲を -4096 に、照明のない要素の前のレイヤー最大値を設定してみてください。

また、シェーダーマテリアルが光をブロックしている可能性はありませんか?シェーダーマテリアルを削除して、動作するか試してみてください。シェーダーマテリアルが必要なのは承知していますが、原因となっているかどうかを確認するためです。

最初に試したのは、記述する前のオクルージョンレイヤー(もちろん :sweat_smile:)でした。その後、レイヤーをいじってみましたが、うまくいきませんでした。z_index も同様です。前述の通り、他のオブジェクトはキャラクターのライトと天井のライトで照らされていますが、私のプレイヤーは照らされていません。暗くするために、Modulate Canvas を使用しています。Visual Script のダークネスフィルターを使用すると画面全体が暗くなりますが、ライティングを無視してしまうためです。ファンとキャラクターの両方とも z index は 0 で、z index relative が有効になっており、同じライティングレイヤーを使用しています。ライトレンジの z min と z max はそれぞれ -1024 と 1024 です。原則として、すべてデフォルト設定で動作するはずです。最小および最大レイヤーを -200 と 200 に変更してみましたが、うまくいきませんでした。Baz さんが言ったことも試してみましたが、やはりうまくいきませんでした。

プロジェクトを送っていただけないでしょうか。詳しく調査いたします。

穴が見つかったら、別の基本プロジェクトで再現しようとし、それでも問題が解決しない場合は報告します。

「いいね!」 1

ありがとうございます!

さて、照明に関するプロジェクトと動画をご紹介します。プレイヤー(青)はパッドまたは矢印キーを使って左から右へ移動します。敵は独立して移動し、両方とも対応するゲームオブジェクトプロファイルで作成されています。Xのついたオブジェクトは、空のプロファイルで作成されたゲームオブジェクトで、装飾のみです。
画面を暗くするために、Canvasmodulatedを使用しています。AGMのDARKNESSフィルターは画面を暗くしますが、照明を無視してしまうためです。
何か間違っているのか、バグなのかはわかりません。
ちなみに、タイルマップを除いて、どのオブジェクトもライトオクルーダーを持っていません。

動画:File folder on MEGA

light.zip (2.5 MB)

プロジェクトをありがとうございます。

「親マテリアルを使用」をチェックすると、動作するようです:

ありがとうございます、動作しました。このオプションはデフォルトで有効にすべきだと考えます。そうすれば、このような問題や、TakenDamageSettings 関数が機能しないといった事態を防げるはずです。すべての機能が正しく動作するためには、デフォルトで有効にするべきであり、オブジェクト作成時に毎回確認する必要がなくなります。なぜなら、こうした設定は時として見落とされがちだからです。これは私にとって二度目の経験です。:man_facepalming: :sweat_smile:

なるほど、Godot でもデフォルトではオフになっています。オフにするべき明確な理由があるか確認してみましょう。特に理由がなければ、デフォルトでオンにするのが望ましいでしょう。