感谢 baz 再次进行双重检查。它现在可以工作了!!
对于那些想知道需要哪些步骤的人,以下是:
- 在你的视觉脚本控制的"PlayerObject"中添加一个"Child"节点对象。
→ 在我的情况下,该对象名为"NativeSignalToVS"。
- 将脚本附加到"Child 节点”上,→ 并命名为你喜欢的任何名称。
→ 例如:“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 节点”,在我的情况下再次点击"NativeSignalToVS"
→ 查看编辑器右侧,点击"Node"标签,然后点击"Signals"表格。
→ 右键单击并点击第一个包含 gd 脚本中"Your Signal Name"的项的"Connect"。
- 高亮显示视觉脚本对象父级,在我的情况下是"Player1_Base",然后点击"Pick",它有一个铅笔图标。
6) 在"Pick"中,确保仅高亮"Scripts Methods Only",禁用"Combatible Methods only"
-
点击"Attached Script",它显示类似"recieve_signal_signal_name:string……"的文字。
-
点击"Okay" → 然后点击"Connect"。
-
你应该在节点子对象的节点标签中看到"..:: receive_signal()"。
→ 它应该位于你的"Named_Signal"下方,在我的情况下是"playerAction"。
- 从视觉脚本父对象开始,使用你的视觉编程"箭头"指向指定的框(例如 Dash)。
例如:Standing_Still —————→ Dash
在 (——→) 连接的箭头中添加"SignalDetected"。
现在设置"Signal Filter" → 无过滤器。
Argument Type → 数值。
Condition Numeric → =。
Comparison Target → 常量值。
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 当前正在被调用。
如果我在信息过载方面做得不对,我很抱歉,我只是不明白,即使只是直接使用数字而没有按键,我仍然无法在行走 + 冲刺的同时进行,只能静止……