Unity安卓端AlienPlayer按钮控制移动问题(键盘控制正常)
修复AlienPlayer安卓端按钮控制移动的问题
我看了你的代码,发现几个关键问题导致按钮控制无效,下面一步步帮你搞定:
1. 核心问题:按钮控制时移动速度依赖键盘输入值
你的left()和right()方法里用了movement变量,这个值是从键盘的Horizontal轴获取的——当用按钮控制时,movement是0,所以刚体的x轴速度始终为0,自然不会移动。
修复方法:让移动方法直接用固定方向值,不再依赖键盘输入:
public void left() { // 直接用-1表示向左的方向,乘以speed得到移动速度 rigidBody.velocity = new Vector2(-speed, rigidBody.velocity.y); transform.localScale = new Vector2(2f, 2f); } public void right() { // 用1表示向右的方向 rigidBody.velocity = new Vector2(speed, rigidBody.velocity.y); transform.localScale = new Vector2(-2f, 2f); }
2. 逻辑顺序错误:键盘输入的else分支会覆盖按钮控制
原Update()里,当键盘没有输入时,你会直接把x轴速度设为0,之后才判断按钮状态。这就导致即使按钮按下,移动效果也会被提前重置的速度抵消。
修复方法:调整逻辑,只有当既没有键盘输入,也没有按钮按下时,才停止x轴移动:
void Update() { // 先处理键盘输入 float keyboardMovement = Input.GetAxis("Horizontal"); if (keyboardMovement > 0f) { right(); // 注意:原代码这里调用left()是方向反的!Horizontal轴向右为正,对应right() } else if (keyboardMovement < 0f) { left(); } else { // 只有无键盘输入且无按钮按下时,才重置x轴速度 if (!moveLeft && !moveRight) { rigidBody.velocity = new Vector2(0, rigidBody.velocity.y); } } // 处理按钮输入(按住按钮时持续移动) if (moveLeft) { left(); } else if (moveRight) { right(); } }
注:原代码里键盘向右(movement>0)调用left()是方向颠倒的,我已经修正了,如果你的实际场景中方向是对的,可能是scale设置的问题,你可以根据需求调整回来。
3. 安卓端按钮事件绑定注意事项
安卓端要实现按住按钮持续移动,不能只用Button的OnClick事件(它只会触发一次点击),需要用EventTrigger组件:
- 给按钮添加
EventTrigger组件 - 点击
Add New Event Type,选择Pointer Down,绑定你的LeftBtnDown/RightBtnDown方法 - 再添加
Pointer Up和Pointer Exit(防止手指滑出按钮后还在移动),绑定LeftBtnUp/RightBtnUp方法
这样当你按住按钮时,moveLeft/moveRight会保持为true,松开或滑出时变为false,就能实现持续移动的效果了。
内容的提问来源于stack exchange,提问作者HARSH SINGH
相关产品推荐
相关产品推荐

