Unity C#开发中玩家物体移动速度过快问题求解
问题原因
- 代码中两次调用了
transform.Translate,左右偏移量swerveAmount被重复叠加,相当于左右移动速度直接翻倍 - 第二次
Translate的z轴参数直接写了固定值1,没有乘以Time.deltaTime,导致每帧都往前移动1个单位,帧率越高移动速度越快,完全没有按你设置的verticalSpeed参数控制
修复后代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour{ private SwerveInputSystem _swerveInputSystem; [SerializeField] private float swerveSpeed = 5f; [SerializeField] private float maxSwerveAmount = 1f; [SerializeField] private float verticalSpeed = 3f; // 可直接在Inspector面板调整数值控制前进速度 void Start(){ _swerveInputSystem = GetComponent<SwerveInputSystem>(); } void Update(){ float swerveAmount = Time.deltaTime * swerveSpeed * _swerveInputSystem.MoveFactorX; swerveAmount = Mathf.Clamp(swerveAmount, -maxSwerveAmount, maxSwerveAmount); float verticalDelta = verticalSpeed * Time.deltaTime; // 单次调用Translate即可,根据你的游戏方向调整y、z轴的赋值 transform.Translate(swerveAmount, 0, verticalDelta); // 如果前进方向是y轴,就替换为下面这句 // transform.Translate(swerveAmount, verticalDelta, 0); } }
后续调整建议
- 所有移动速度参数不需要改代码,直接在Unity Inspector面板调整对应字段的数值即可:
swerveSpeed控制左右移动灵敏度,verticalSpeed控制自动前进的速度 - 如果玩家是带刚体的物理对象,建议把移动逻辑放到
FixedUpdate里执行,避免帧率波动导致移动速度不稳定
内容的提问来源于stack exchange,提问作者user17188154
相关产品推荐
相关产品推荐

