Unity MissingMethodException:找不到Player1Movement.OnJump方法问题求助
问题诊断与解决方案
这个异常的核心原因是Jump动作被重复绑定:你通过代码订阅了OnJump方法,同时在Input Action Asset的Inspector配置中也绑定了该方法,而Inspector绑定要求方法必须是public才能被反射调用,导致反射调用失败抛出异常,但代码内部的Lambda调用不受权限限制,所以OnJump实际能执行。
解决步骤
1. 移除Input Action Asset中的重复绑定
- 打开你的
.inputactions资源文件 - 切换到
Player动作组,找到Jump动作 - 在右侧面板的Events区域,检查
Performed事件列表,如果有绑定Player1Movement.OnJump,直接删除该条目 - 保存资源,回到Unity编辑器测试
2. (可选)如果保留Inspector绑定,修改方法权限
如果你需要通过Inspector绑定事件而非代码订阅,将OnJump方法的访问修饰符改为public:
public void OnJump(InputAction.CallbackContext context) { rbody.velocity = Vector2.up * jPower; Debug.Log(context); }
同时删除代码中订阅Jump事件的代码:
// 删掉这一行 actions.FindActionMap("Player").FindAction("Jump").performed += (context) => OnJump(context);
3. 清理缓存并重新编译
- 关闭Unity编辑器
- 删除项目根目录下的
Library和Temp文件夹 - 重新打开Unity,等待自动编译完成后测试
补充说明
你的Debug日志显示OnJump确实被执行,是因为代码中的Lambda表达式是在类内部直接调用方法,不受private权限限制;而错误日志中的InvokeMember调用栈,是Unity尝试通过反射调用Inspector绑定的private方法时失败导致的。另外,按W/S触发异常,可能是你的Move动作配置中意外关联了Jump的事件绑定,检查时可以一并确认Move动作的Events配置是否正常。
内容的提问来源于stack exchange,提问作者Gatorz
相关产品推荐
相关产品推荐

