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

如何指定mlagents-learn测试参数?Unity中ActionBuffers填充位置问询

Unity ML-Agents 填充ActionBuffers数组实现AI控制跳跃的操作位置

要让mlagents-learn测试跳跃动作,核心是在Agent子类的对应方法里处理动作映射与观测收集,具体操作位置如下:

1. 配置动作空间

在Agent的初始化方法里定义动作类型,因为跳跃是「跳/不跳」的二选一离散动作,设置离散动作分支:

public override void Initialize()
{
    // 定义1个离散动作分支,分支包含2个可选值(0=不执行跳跃,1=执行跳跃)
    ActionSpec = ActionSpec.MakeDiscrete(2);
}

2. 处理AI动作(映射ActionBuffers到跳跃逻辑)

在OnActionReceived(ActionBuffers actions)方法中,读取ActionBuffers里的离散动作值,触发你已有的跳跃逻辑:

public override void OnActionReceived(ActionBuffers actions)
{
    // 从离散动作缓冲区中取出第一个分支的动作值
    int jumpTrigger = actions.DiscreteActions[0];
    
    // 映射到你已实现的跳跃逻辑,和空格键触发的逻辑完全一致
    if (jumpTrigger == 1)
    {
        Jump(); // 调用你原本检测空格键时执行的跳跃方法
    }

    // 补充奖励逻辑(关键:让AI明确行为的对错)
    // 例如:跳跃后成功避开障碍给+1奖励,掉出场景给-1奖励
}

3. 保留手动测试(可选)

如果需要用空格键手动测试AI的行为逻辑,可以在Heuristic方法里把键盘输入映射到ActionBuffers:

public override void Heuristic(in ActionBuffers actionsOut)
{
    var discreteActions = actionsOut.DiscreteActions;
    // 检测空格键,按下时设置动作值为1,否则为0
    discreteActions[0] = Input.GetKey(KeyCode.Space) ? 1 : 0;
}

4. 收集关键观测数据

在CollectObservations(VectorSensor sensor)方法里添加AI决策需要的观测信息,比如:

public override void CollectObservations(VectorSensor sensor)
{
    // 添加立方体的垂直速度(判断是否处于跳跃状态)
    sensor.AddObservation(GetComponent<Rigidbody2D>().velocity.y);
    // 添加立方体是否接触地面(判断是否具备跳跃条件)
    sensor.AddObservation(isGrounded);
    // 可补充其他观测,比如距离障碍物的水平距离等
}

额外注意

  • 确保Agent组件挂载在2D立方体对象上,且Behavior Parameters组件已关联对应的行为配置文件;
  • 奖励函数的设计直接影响AI学习效果,需明确正向/负向行为的奖励规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:32:05