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

Unity 2D游戏适配Android触屏虚拟摇杆输入的C#脚本修改求助

脚本修改方案

前置准备

  • 提前在场景中用UGUI实现虚拟摇杆UI组件,确保摇杆脚本可对外输出归一化的水平、垂直输入值(取值范围为-1~1),通用摇杆组件一般会封装好Horizontal、Vertical float属性或者input Vector2属性供外部调用。
  • 你当前贴出的是输入参数的声明代码,这部分本身不需要修改,只需要新增摇杆相关逻辑即可。

具体修改步骤

  1. 在现有输入参数声明下方新增虚拟摇杆引用变量,将变量名替换为你实际使用的摇杆类名即可:
public InputButton Pause = new InputButton(KeyCode.Escape, XboxControllerButtons.Menu);
public InputButton Interact = new InputButton(KeyCode.E, XboxControllerButtons.Y);
public InputButton MeleeAttack = new InputButton(KeyCode.K, XboxControllerButtons.X);
public InputButton RangedAttack = new InputButton(KeyCode.O, XboxControllerButtons.B);
public InputButton Jump = new InputButton(KeyCode.Space, XboxControllerButtons.A);
public InputAxis Horizontal = new InputAxis(KeyCode.D, KeyCode.A, XboxControllerAxes.LeftstickHorizontal);
public InputAxis Vertical = new InputAxis(KeyCode.W, KeyCode.S, XboxControllerAxes.LeftstickVertical);
// 新增:虚拟摇杆引用
public Joystick moveJoystick;
[HideInInspector]
public DataSettings dataSettings;
  1. 找到脚本中读取Horizontal、Vertical输入值的逻辑位置,修改为优先读取摇杆输入,摇杆无操作时再走原键盘、手柄输入逻辑:
// 原移动输入读取代码
// float horizontalInput = Horizontal.GetValue();
// float verticalInput = Vertical.GetValue();

// 修改后的输入读取代码
float horizontalInput, verticalInput;
// 死区设置,避免摇杆轻微漂移触发误操作
const float inputDeadZone = 0.02f;

if (moveJoystick != null)
{
    horizontalInput = Mathf.Abs(moveJoystick.Horizontal) > inputDeadZone ? moveJoystick.Horizontal : 0;
    verticalInput = Mathf.Abs(moveJoystick.Vertical) > inputDeadZone ? moveJoystick.Vertical : 0;
}
// 摇杆无输入或者未赋值时,读取原有输入
if (Mathf.Abs(horizontalInput) < inputDeadZone && Mathf.Abs(verticalInput) < inputDeadZone)
{
    horizontalInput = Horizontal.GetValue();
    verticalInput = Vertical.GetValue();
}

扩展适配(可选)

如果需要同时适配触屏按钮实现跳跃、攻击、暂停等操作,可以按以下逻辑修改:

  • 新增UGUI按钮的公共引用变量,比如public Button jumpButton;
  • 在Start()方法中绑定按钮事件,对应2D Game Kit的InputButton封装方法:
private void Start()
{
    // 监听跳跃按钮按下/抬起事件,匹配原输入的触发逻辑
    EventTrigger trigger = jumpButton.gameObject.AddComponent<EventTrigger>();
    // 按下事件
    EventTrigger.Entry downEntry = new EventTrigger.Entry { eventID = EventTriggerType.PointerDown };
    downEntry.callback.AddListener(_ => Jump.Press());
    trigger.triggers.Add(downEntry);
    // 抬起事件
    EventTrigger.Entry upEntry = new EventTrigger.Entry { eventID = EventTriggerType.PointerUp };
    upEntry.callback.AddListener(_ => Jump.Release());
    trigger.triggers.Add(upEntry);
}

注意事项

  • 摇杆所在的Canvas需设置为屏幕空间-覆盖渲染模式,保证触屏交互优先级最高
  • 可以添加平台编译宏,只在移动平台启用摇杆逻辑,减少PC端不必要的性能消耗:
#if UNITY_ANDROID || UNITY_IOS
// 移动平台摇杆输入逻辑
#else
// PC/主机平台原输入逻辑
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:36:05