自制Unity无鼠标操控框架PageManager

1、前言:

        在模仿《Stick To The Plan》(中文名《过木不汪》)时,发现该游戏完全不需要用到鼠标。按键操作会响应到主角与UI界面,会导致同步操作。

        设想将一个Scene中出现的多个不同的按键控制对象分成多个不同的Page,GamePlay时玩家操控的主角为一个Page,同时打开的UI界面为一个新的Page,同一时间只能操作一个Page,解决按键上的冲突。

框架解决的需求:

①解决GamePlay和UI同时存在相同的按键冲突。它在GamePlay时是上下左右方向键控制主角,GamePlay时打开UI选项也是上下左右方向键切换按钮。

②解决按钮非线性切换。

技术点:

①单例模式;

②事件调用;

③命令模式;

        

2、游戏界面实现:

这章的内容是②解决按钮非线性切换。

游戏界面:

此处的按钮不是水平或者垂直分布。

切换按键有:

        ①“设置”按钮--按上方向键-->“开始”按钮;

        ②“设置”按钮--按右方向键-->“退出”按钮。

        ③“设置”按钮--按下方向键-->“退出”按钮。

        其中②和③都能从“退出”按钮切换到“退出”按钮,出现多种映射关系。

unity对应的界面:

简单重现了游戏的按钮分布。

对应的代码:

当前的按钮切换是在ShouyeButtonUI类中实现,ShouyeButtonUI类继承ButtonGenerate抽象类,ButtonGenerate负责生成和操作UI按钮界面,ShouyeButtonUI类负责管理UI与键盘的映射,注册按键事件。

// ShouyeButtonUI.cs

protected override void Start()
{
    // 初始化UI图。
    UIGraph = new int[][]{
        new int[]{0, DownLeft, 0, 0, 0},
        new int[]{Up, 0, DownRight, Left, 0},
        new int[]{0, UpLeft, 0, 0, 0},
        new int[]{0, UpRight, 0, 0, DownLeft},
        new int[]{0, 0, 0, UpRight, 0},
    };

    // 注册事件。
    AddCurrentPageAllAction(InputManager.Instance.OutOnMoveDown);
    AddCurrentPageAllAction(InputManager.Instance.OutOnReturnDown);
    AddCurrentPageAllAction(InputManager.Instance.OutOnSpaceDown);

    base.Start();
}

“DownLeft”表示按下或者左方向键。

“new int[]{0, DownLeft, 0, 0, 0}”表示按下或者左方向键可以切换到第二个按钮。

“AddCurrentPageAllAction(Action)”表示给当前页面注册事件。

“InputManager.Instance.OutOnMoveDown”表示通用的操作。

3、

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值