他シーンからシグナルを送る方法

同じシーンの中でシグナルを送る
godotでは、操作キャラのシーン、ユーザインタフェイス(UI)のシーン、といった形で、各部品を作成し、それを集めて一つのゲームを作ります。
(例:操作キャラシーンに何かがぶつかったら、操作キャラのHPにダメージを与える)
そうしたときは、以下のように、シグナル、という機能を使います。

①操作キャラのエリア(Area2D)に、何かが侵入したら、というシグナル。
 このシグナルをダブルクリック、処理を記載するプログラムを選ぶと・・・



②上記シグナルが発生したとき実行される関数が、選択したスクリプト内に自動で作られ、
 そこに、行いたい処理を記載できる(左側に緑色のシグナル入口マークができます)

異なるシーンの間でシグナルを送る
しかし、この方法は、同じシーンにあるプログラムにしか反映できません。
例えば、UIシーンで装備を変更したら、操作キャラシーンの装備を変更する、ということをしたい場合、どうすれば良いのか、わかりませんでした。
探してみると、以下の記事の場合、別のシーンをインスタンスにしてシグナルを送る、という方法を教えてくれます。
https://anogame.net/godot-emit-signal-other-scene/

ただ、自分の場合、UIシーンはどこでも使いたい物で、メインキャラのインスタンスとして生成したくはありませんでした。UIシーンを自動読込にしていたからか、インスタンスにせずに、実装できました。

①UIシーンは自動読込にしてある(プロジェクト->プロジェクト設定)


②UIシーンのスクリプト(inventorywep)で、装備変更時にシグナル(wep_changed)を出力するようにする。
    1.変数の宣言の箇所で、シグナルを宣言
 2.装備変更の処理の箇所で、シグナルを出す(エミット)

③操作キャラスクリプト(Nezumi)に、シグナルをつなげ、後続の処理を記載。
 1.操作キャラスクリプト(Nezumi)のready関数内で、
   UIシーンのスクリプト(inventorywep)のシグナル(wep_changed)と、
   操作キャラのスクリプトの関数(wep_load)をつなげるコマンドを記入

④操作キャラのスクリプトに、つなげたかったwep_load関数と、
その行いたい装備変更処理(武器シーンの検索・ロード)を記載する。
















コメント

このブログの人気の投稿

プラグイン(godot sqlite)を含めてエクスポートすると、データの更新ができない問題

初心者に良い本は? → 『 ゆるっとはじめるGodot Engine ゲームプログラミング 』