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

Unity ML-Agents中OnActionReceived方法未触发问题求助

解决Unity ML-Agents OnActionReceived未被调用的问题

1. 检查Behavior Parameters组件配置

  • 确保挂载MoveCar脚本的GameObject上存在Behavior Parameters组件,且:
    • Continuous Action Size设置为3(和代码中使用的3个连续动作对应)
    • 根据测试/训练需求选择正确的Behavior Type:手动测试选Heuristic Only,训练选Default,推理选Inference Only

2. 确认Agent组件与GameObject状态

  • 检查MoveCar脚本(Agent子类)在Inspector中处于启用状态(勾选框为选中)
  • 确保挂载脚本的GameObject没有被禁用(Hierarchy中对象名称未变灰)

3. 实现启发式输入(手动测试必备)

如果用手动操作测试车辆,必须重写Heuristic方法提供动作输入,否则Agent无动作源,OnActionReceived不会触发。示例代码:

public override void Heuristic(in ActionBuffers actionsOut)
{
    var continuousActions = actionsOut.ContinuousActions;
    // 用键盘输入模拟动作
    continuousActions[0] = Input.GetAxis("Vertical"); // 前进/后退对应加速度
    continuousActions[1] = Input.GetKey(KeyCode.Space) ? 1f : 0f; // 刹车
    continuousActions[2] = Input.GetAxis("Horizontal"); // 转向
}

4. 检查Agent生命周期方法

  • 确保OnEpisodeBegin()或Initialize()方法中没有错误逻辑导致Agent停止运行,比如未正确初始化变量、提前调用EndEpisode()且未重启Episode
  • 可以在这些方法中添加Debug.Log确认是否正常执行

5. 训练模式下验证通讯连接

如果是训练场景:

  • 确认Python训练环境已启动,且Unity ML-Agents Settings的通讯端口与训练脚本端口一致
  • 确保训练脚本中指定的行为名称与Behavior Parameters里的Behavior Name完全匹配

6. 后续车辆动作验证(触发OnActionReceived后)

当OnActionReceived正常触发后,若车辆仍不动,需检查:

  • wheelBackLeft、wheelFrontLeft等Wheel Collider组件已在Inspector中正确赋值
  • updateWheel方法逻辑正确,能同步车轮模型的位置和旋转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:55:09