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

Unity玩家移动速度莫名从1变为0.07问题求助

问题:PlayerController中moveSpeed莫名从1变为0.07的解决方法

问题根源

你在FixedUpdate方法里调用rb.Cast时,错误地使用了**赋值运算符=**来定义射线投射的最大距离,这直接把moveSpeed的值覆盖成了Time.fixedDeltaTime + collisionOffset的结果(Unity默认Time.fixedDeltaTime为0.02,加上0.05的collisionOffset正好是0.07),这就是数值突变的原因。

// 错误代码:这里用了=,直接修改了moveSpeed的值
int count = rb.Cast(
    movementInput,
    movementFilter,
    castCollisions,
    moveSpeed = Time.fixedDeltaTime + collisionOffset);

修复方案

把赋值运算符=改成乘法+加法的表达式,计算本次固定帧更新中玩家可移动的最大距离(速度×固定时间步长 + 碰撞偏移),不要修改moveSpeed本身:

// 修正后的代码:用表达式计算投射距离,不修改moveSpeed
int count = rb.Cast(
    movementInput,
    movementFilter,
    castCollisions,
    moveSpeed * Time.fixedDeltaTime + collisionOffset);

完整修正后的PlayerController代码

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

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 1f;
    public float collisionOffset = 0.05f;
    public ContactFilter2D movementFilter;

    Vector2 movementInput;
    Rigidbody2D rb;
    List<RaycastHit2D> castCollisions = new List<RaycastHit2D>();

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
       if(movementInput != Vector2.zero)
       {
            int count = rb.Cast(
                movementInput,
                movementFilter,
                castCollisions,
                moveSpeed * Time.fixedDeltaTime + collisionOffset);

            if(count == 0)
            {
                 rb.MovePosition(rb.position + movementInput * moveSpeed * Time.fixedDeltaTime);
            }
       }
     }

    void OnMove(InputValue movementValue)
    {
        movementInput = movementValue.Get<Vector2>();
    }
}

额外说明

因为moveSpeed是public变量,Unity编辑器的Inspector面板设置会覆盖代码默认值,但你之前的赋值操作会在运行时强制修改这个变量,导致编辑器设置失效。修复后,moveSpeed会保持你在编辑器中设置的数值,正常参与移动计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:55:16