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

Unity输入系统(Package版)移动脚本报错:无法从Vector2Composite读取Vector2类型值的问题求助

我之前在做Unity新输入系统的移动脚本时也踩过类似的坑!结合你的描述和异常信息,我梳理了几个大概率的原因和对应的解决办法:

可能的问题及解决方案
  • Action的Value Type不匹配
    这是最容易踩的坑!你创建的Action的Value Type必须和Vector2Composite的输出类型完全一致(也就是Vector2)。如果你的Action不小心设成了float或其他类型,系统就会抛出“无法读取对应类型值”的异常。
    解决办法:打开你的Input Actions资产文件,找到对应的Movement Action,在Inspector面板里把Value Type改成Vector2,确保和复合控件的输出类型对齐。

  • 回调阶段选择错误
    如果你在绑定Unity事件时,勾选了Action的Started或Canceled阶段(而不只是Performed阶段),那么在这些非Performed阶段调用ReadValue<Vector2>()可能会触发异常——因为Vector2Composite只有在Performed阶段才会输出有效的复合向量值。
    解决办法:要么在Input Actions窗口里,只保留Performed阶段的回调绑定;要么在你的Movement函数里先判断回调阶段,只在正确时机读取值:

    public void Movement(InputAction.CallbackContext context)
    {
        Debug.Log("!!!!!!");
        if (context.phase == InputActionPhase.Performed)
        {
            Vector2 moveVal = context.ReadValue<Vector2>();
            playerContainer.transform.Translate(new Vector3(moveVal.x, moveVal.y, 0) * moveSpeed * Time.deltaTime);
        }
    }
    
  • 代码里的大小写错误(顺带修正)
    虽然这不是导致当前异常的直接原因,但你的代码里moveVal.X和moveVal.Y是错误的——C#中Vector2的属性是小写的x和y,写成大写会编译失败,即便暂时没报错,后续也会导致移动逻辑失效,记得改成moveVal.x和moveVal.y。

  • 输入系统版本兼容性问题
    如果你使用的是较旧的输入系统包版本,可能存在复合控件与ReadValue方法的兼容性Bug。可以试试在Package Manager里把Input System包更新到最新的稳定版本,再重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:59:06