Unity3D实现角色按住移动键持续移动功能问题咨询
问题原因
你当前使用的Input.GetKeyDownAPI仅会在按键按下的第一帧返回一次true,所以只会给刚体施加一次推力,自然只能单次移动。
解决方案
把Input.GetKeyDown替换为Input.GetKey即可,这个API会在按键处于按住状态的每帧都返回true,每帧持续施加推力就能实现按住移动的效果。
另外注意你原有代码里的Keycode拼写有误,正确写法是KeyCode(C大写),C#大小写敏感,错误拼写会触发编译报错。
基础修改代码
void Update() { if (Input.GetKey(KeyCode.W)) { rb.AddForce(Vector3.forward * speed); } }
优化建议
物理相关操作建议放在FixedUpdate中执行,避免因为设备帧率波动导致移动速度不一致,同时可以添加最大速度限制避免角色越跑越快:
public float maxSpeed = 5f; private bool moveForward; void Update() { // 输入检测保留在Update中,避免帧率过低漏判按键操作 moveForward = Input.GetKey(KeyCode.W); } void FixedUpdate() { if (moveForward) { rb.AddForce(Vector3.forward * speed); // 限制最大移动速度 if (rb.velocity.magnitude > maxSpeed) { rb.velocity = rb.velocity.normalized * maxSpeed; } } }
如果你不需要物理模拟的惯性效果,想要更干脆的移动手感,也可以直接修改刚体的velocity属性:
void FixedUpdate() { if (moveForward) { // 保留y轴速度,不影响跳跃下落效果 rb.velocity = new Vector3(0, rb.velocity.y, speed); } }
内容的提问来源于stack exchange,提问作者Yash Verma
相关产品推荐
相关产品推荐

