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

Unity中松开WASD按键后3D角色仍持续移动的问题求助

解决Unity第三人称角色松开按键后滑行的问题

问题根源在于你使用的Input.GetAxis("Horizontal")和Input.GetAxis("Vertical")会对输入做内置平滑处理——松开按键后,返回值不会立刻降到0,而是逐渐衰减,这就导致角色会继续滑动一小段时间。

最快解决方法:使用Input.GetAxisRaw替代Input.GetAxis

Input.GetAxisRaw会直接返回输入的原始值(-1、0、1),没有平滑过渡,松开按键后立刻归零,完美解决滑行问题。

修改你的PlayerController.cs中获取输入的部分:

// 把原来的Input.GetAxis改成Input.GetAxisRaw
float horizontal = Input.GetAxisRaw("Horizontal");
float vartical = Input.GetAxisRaw("Vertical");

修改后的完整PlayerController.cs:

public class PlayerController : MonoBehaviour
{
    [SerializeField] float moveSpeed = 5f;

    [SerializeField] float rotationSpeed = 1000f;
    
    Quaternion targetRotation;
    
    CameraController cameraController;

    private void Awake() {
        cameraController = Camera.main.GetComponent<CameraController>();
    }

    private void Update() {
        // 关键修改:用GetAxisRaw替代GetAxis
        float horizontal = Input.GetAxisRaw("Horizontal");
        float vartical = Input.GetAxisRaw("Vertical");

        float moveAmount = Mathf.Clamp01(Mathf.Abs(horizontal) + Mathf.Abs(vartical));

        var moveInput = new Vector3(horizontal, 0, vartical);
        // 因为GetAxisRaw的斜向输入长度为√2,需要归一化避免移动速度过快
        if (moveInput.magnitude > 1)
            moveInput = moveInput.normalized;
            
        var moveDirection = cameraController.PlanerRotation * moveInput;

        if (moveAmount > 0) {
            transform.position += moveSpeed * Time.deltaTime * moveDirection;
            targetRotation = Quaternion.LookRotation(moveDirection);
        }

        transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation,
            rotationSpeed * Time.deltaTime);
    }
}

额外说明

如果之后你希望保留一点输入平滑但不想有明显滑行,可以手动控制输入衰减速度,比如用Mathf.MoveTowards让输入值快速趋近于0,但对于当前需求来说,GetAxisRaw是最简单直接的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:09:54