baz 氏に再確認していただきありがとうございます。動作しました!!
手順がわからない方のために
- ビジュアルスクリプトで制御されている"Player0bject"に"Child"ノードオブジェクトを追加します。
→私の場合、オブジェクト名は"NativeSignalToVS"です。
- "Child node"にスクリプトをアタッチし、任意の名前を付けます。
→例:“NativeSignalToVS.gd” → gd は gd スクリプトを指します。
- スクリプトに以下の項目を追加します。
extends Node
# 正直、これが不要かどうかはわかりません
@onready var player:GameObject = $".."
var Action_Value := 0
# 基本的にこれは信号 Your_Name_Here(Action_Value: float) を指します
signal playerAction(Action_Value: float)
func_ready() -> void:
playerAction.emit(Action_Value)
func _unhandled_input(event) -> void:
if event.is_action_pressed("Key_Dash"):
Action_Value = 6
playerAction.emit(Action_Value)
print("Dash Action Initiated: ", Action_Value)
# "Key_Dash"がどこから来たのか疑問に思われるかもしれませんが、Input_Map の"Name_of_Action"です。
- 保存後 → "Child node"をクリックします。私の場合は再度"NativeSignalToVS"です。
→エディタの右側にある"Node"タブをクリックし、次に"Signals"テーブルをクリックします。
→最初の項目で"YOur Signal Name"(gd スクリプトのもの)があるものを右クリックし、"Connect"をクリックします。
-
ビジュアルスクリプトオブジェクトの親を強調表示します。私の場合は"Player1_Base"でした。次に"PIck"という単語をクリックします(鉛筆アイコンがあります)。
-
"Pick"で"Scripts Methods Only"のみが強調表示され、"Combatible Methods only"が無効になっていることを確認します。
-
"Attached Script"をクリックします。"recieve_signal_signal_name:string"などの文字が表示されます。
-
"Okay"をクリックし、次に"Connect"をクリックします。
-
ノードの子オブジェクトのノードタブに"..:: receive_signal()"が表示されるはずです。
→私の場合、"playerAction"という"Named_Signal"の下にあるはずです。
- ビジュアルスクリプトの親オブジェクトに戻り、ビジュアルプログラミングの"Arrows"を使用して、指定されたボックス(例:“Dash”)を指します。
例: Standing_Still —————→ Dash
(——→) で接続された矢印に"SignalDetected"を追加します。
次に"Signal Filter"を設定します → No Filter
Argument Type → Numeric
Condition Numeric → =
Comparison Target → Constant Value
Constant Value → gd スクリプトで割り当てた値(私の場合は"6")
- “Okay"をクリックすると、プレイヤーが静止している場合は、値"6”(または割り当てた任意の値)を使用して何かを行うことができるはずです。
私の場合はこれで動作します。これが完全に正しい設定方法かどうかはわかりませんが、動作するので素晴らしいです
もし誰かが「なぜ…歩いているときにダッシュを開始できないのか」を教えてください。
例:
Player_Still ——————→ PlayerWalking —————–> “Player_Still_Shortcut”
“Player_Still_Shortcut” ——————> PlayerDashing // 静止状態からダッシュ可能
“Player_Walking_Shortcut” ————→ PlayerDashing // 歩いている状態ではダッシュできない?
PlayerActionValues:
0 => 静止中
PlayerActionValues >0 かつ PlayerActionValues<5 => “Player Walks”
Player Action Value = 6 // 静止中はプレイヤーをダッシュさせますが、歩いている状態ではダッシュしません。コンソールでは値 6 が現在呼び出されているにもかかわらずです。
情報過多で申し訳ありませんが、単なる数値だけでキーを押さなくても、なぜ静止中のみしか歩行とダッシュを同時に行えないのかがわかりません。