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

如何修复C#编写的Unity玩家移动脚本运行异常问题?

问题排查与修复方案

代码中的核心错误

  • 输入类拼写错误:Unity官方输入API是Input(首字母大写),代码里小写的input会直接导致编译失败。
  • 引号类型错误:C#中字符串参数必须用双引号"",单引号''仅用于字符类型,和GetAxis方法的参数要求不匹配。
  • Move方法参数错误:CharacterController.Move()需要传入Vector3类型参数,不能直接传三个独立的float值。

修正后的完整代码

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f; // 预设默认速度,避免Inspector未赋值时无法移动

    CharacterController ch;

    void Start()
    {
        ch = GetComponent<CharacterController>();
    }

    void Update()
    {
        // 读取基础输入
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        // 基于主相机方向计算移动向量(符合3D游戏常规操作逻辑)
        Vector3 cameraForward = Camera.main.transform.forward;
        Vector3 cameraRight = Camera.main.transform.right;

        // 忽略Y轴,保持水平移动
        cameraForward.y = 0;
        cameraRight.y = 0;
        cameraForward.Normalize();
        cameraRight.Normalize();

        // 合成最终移动方向并归一化,避免斜向移动速度超标
        Vector3 moveDirection = cameraRight * horizontalInput + cameraForward * verticalInput;
        if (moveDirection.magnitude > 1)
        {
            moveDirection.Normalize();
        }

        // 执行移动
        ch.Move(moveDirection * moveSpeed * Time.deltaTime);
    }
}

额外优化说明

  1. 给moveSpeed设置默认值,防止忘记在Inspector面板赋值导致玩家无法移动。
  2. 添加了相机相对移动逻辑,玩家按WASD时,移动方向会跟随主相机视角,更符合3D游戏的操作习惯。
  3. 对移动方向做归一化处理,避免同时按下两个方向键时,移动速度超过设定的moveSpeed。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:55:19