You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot C# 子节点信号调用父节点方法报Method not found如何解决

问题原因

你的代码逻辑本身是成立的,报错Method not found是因为Godot引擎默认无法识别C#类中未显式暴露给引擎侧的方法,即使方法声明为public也需要额外标记才能被信号回调调用。

修复方案

适配Godot 3.x 版本(你当前的API写法对应3.x)

  1. 给父节点Main_control的目标方法添加[Godot.Method]特性,暴露给引擎调用
    修改后的父节点代码:
public class Main_control : Control
{
  public override void _Ready()
  {
  }
  
  // 新增Method特性,将方法暴露给Godot引擎
  [Godot.Method]
  public void mnk_show_game()
  {
    GD.Print("mnk_show_game reached");
  }
}
  1. 可选优化:避免硬编码方法名、添加空校验,减少拼写错误和空引用风险
    修改后的子节点_Ready方法:
public override void _Ready()
{
  game_controller = GetParent<Godot.Control>();
  // 校验父节点存在后再连接信号
  if (game_controller != null)
  {
    // 用nameof语法代替硬编码字符串,编译时即可校验方法名正确性
    this.Connect("mnk_game_finished", game_controller, nameof(Main_control.mnk_show_game));
  }
}

适配Godot 4.x 版本

如果使用的是Godot 4.x,C#信号API有更新,推荐使用强类型连接方式,无需额外加Method特性:
修改子节点_Ready方法即可:

public override void _Ready()
{
  if (GetParent() is Main_control mainCtrl)
  {
    // 4.x支持直接用C#事件语法绑定信号
    mnk_game_finished += mainCtrl.mnk_show_game;
  }
}
验证操作

修改完成后先完整编译C#项目,再运行场景,调用子节点的any_method方法即可正常触发父节点的mnk_show_game逻辑。


内容的提问来源于stack exchange,提问作者33fred33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:42:00