如何让编写的Unity移动脚本生效?求可用的玩家移动替代方案
现有脚本无法运行的问题
- 调用了错误的输入API:
Input.GetKeyDown()仅在按键按下的那一帧触发1次,按住按键不会连续执行,导致你只能看到物体每次按键移动极小一段距离,甚至肉眼无法察觉 - 代码存在语法错误:你贴出的
Update()方法缺少收尾的闭合大括号},会触发编译报错,脚本根本无法被Unity加载运行 - 位移未适配帧率:直接调用
transform.Translate()传入固定值时,位移量和设备帧率强绑定,帧率越高移动速度越快,不同设备运行效果不一致 - 方向使用世界坐标系:
Vector3.forward是固定指向世界空间的Z轴正方向,当玩家物体转向后,按W不会朝着玩家面朝的方向移动
可直接使用的完整移动脚本
以下是无额外依赖、通用的基础移动脚本,可直接挂载使用:
using UnityEngine; public class PlayerMovement : MonoBehaviour { [Header("移动参数")] public float moveSpeed = 5f; // 可在Inspector面板直接调整移动速度 void Update() { // 检测WASD按键长按状态 if (Input.GetKey(KeyCode.W)) transform.Translate(transform.forward * moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.S)) transform.Translate(transform.forward * -moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.A)) transform.Translate(transform.right * -moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.D)) transform.Translate(transform.right * moveSpeed * Time.deltaTime); } }
如果需要更简洁的写法,也可以使用Unity原生轴输入实现,同时支持方向键控制:
using UnityEngine; public class PlayerMovement : MonoBehaviour { public float moveSpeed = 5f; void Update() { float horizontal = Input.GetAxis("Horizontal"); // 对应A/D、左右方向键输入 float vertical = Input.GetAxis("Vertical"); // 对应W/S、上下方向键输入 Vector3 moveDir = transform.right * horizontal + transform.forward * vertical; transform.Translate(moveDir.normalized * moveSpeed * Time.deltaTime); } }
注:normalized的作用是保证斜向移动时速度和单方向移动速度一致,不需要可以直接去掉
使用方法
- 在Unity的Project窗口右键点击,选择
创建 > C# 脚本,命名为PlayerMovement - 双击打开脚本,把上面的代码完整复制替换掉脚本内的原有内容后保存
- 把PlayerMovement脚本拖到Hierarchy窗口中你想要控制的玩家物体上
- 运行游戏,按WASD即可正常移动,可在玩家物体的Inspector面板调整
moveSpeed数值修改移动速度
内容的提问来源于stack exchange,提问作者ObamaBeans
相关产品推荐
相关产品推荐

