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

如何用Unity新输入系统实现玩家动画?遇CS0103报错求解决

问题解决:新输入系统下CS0103错误及动画参数适配

核心问题分析

  1. 变量未声明导致CS0103:你直接使用了horizontalMove但从未在类中定义这个变量,编译器找不到它的定义所以报错。
  2. 混用新旧输入系统:既然已经通过新输入系统的Move回调获取了moveVector,再调用旧输入系统的Input.GetAxis完全多余,还会导致逻辑冲突。

修复后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
    public Animator animator;

    [Header("Movement Variables")]
    private Rigidbody2D rb;
    private Vector2 moveVector;
    public float jumpDistance;
    public float moveSpeed;
    [SerializeField] bool isFacingRight;

    [Header("Ground Check")]
    [SerializeField] bool isGrounded;
    public Transform groundSpot;
    public LayerMask groundLayer;

    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
        isFacingRight = true;
    }

    public void Move(InputAction.CallbackContext context)
    {
        moveVector = context.ReadValue<Vector2>();
    }

    public void Jump(InputAction.CallbackContext context)
    {
        if(context.performed && isGrounded)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpDistance);
        }
    }

    private void Update()
    {
        // 直接用新输入系统的moveVector计算水平速度,替代旧的Input.GetAxis
        float horizontalMove = moveVector.x * moveSpeed;
        animator.SetFloat("Speed", Mathf.Abs(horizontalMove));
        
        isGrounded = Physics2D.OverlapCircle(groundSpot.position, 0.1f, groundLayer);
        CheckDirection();
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(moveVector.x * moveSpeed, rb.velocity.y);
    }

    void CheckDirection()
    {
        if(moveVector.x > 0 && !isFacingRight)
        {
            Flip();
        }
        else if(moveVector.x < 0 && isFacingRight)
        {
            Flip();
        }
    }

    void Flip()
    {
        isFacingRight = !isFacingRight;
        transform.Rotate(new Vector3(0, 180, 0));
    }
}

关键改动说明

  • 在Update方法内声明并初始化horizontalMove,用新输入系统的moveVector.x替代旧的Input.GetAxis("Horizontal"),保证输入逻辑统一。
  • 保留horizontalMove作为临时变量让代码更清晰,也可以直接写成animator.SetFloat("Speed", Mathf.Abs(moveVector.x * moveSpeed));省略变量声明。
  • 确保动画的Speed参数和实际移动逻辑完全绑定,不会出现输入和动画不同步的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:08