Skip to content

Instantly share code, notes, and snippets.

@yashihei
Last active October 30, 2019 12:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashihei/d82a17fcf57ef58e65465c8478505a38 to your computer and use it in GitHub Desktop.
Save yashihei/d82a17fcf57ef58e65465c8478505a38 to your computer and use it in GitHub Desktop.
uGUIのButtonでキー操作(パッド操作)オンリーのUI構築メモ

ButtonをLayoutGroupでいい感じに配置して終わりではって感じなんだけど、面倒なところが少しあったのでメモ

マウス入力問題

今回作っているゲームでは、基本的にマウスでUIは操作しないため、マウスの入力は無視したい。
マウス入力を無視するには、上に透明なレイヤをおいてそこでクリックを吸収する、とか他にも方法があるみたいだけど、今回はStandaloneInputModuleのマウス入力を無効化した。

using UnityEngine;
using UnityEngine.EventSystems;

class IgnoreMouseInputModule : StandaloneInputModule
{
    public override void Process()
    {
        bool usedEvent = SendUpdateEventToSelectedObject();

        if (eventSystem.sendNavigationEvents)
        {
            if (!usedEvent)
                usedEvent |= SendMoveEventToSelectedObject();

            if (!usedEvent)
                SendSubmitEventToSelectedObject();
        }
        
        //無効化
        //ProcessMouseEvent();
    }
}

最初からボタンを選択状態にする

ボタンが選択されてない状態だと、カーソル移動が出来ず操作不能になるので最初から指定されたボタンを選択する。   後、選択状態でハイライトが適用されない場合があるので、対策する。

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class SetFirstSelectedObject : MonoBehaviour
{
    public GameObject m_selectedGameObject;

    private void OnEnable()
    {
        EventSystem.current.SetSelectedGameObject(m_selectedGameObject);
        //ハイライト対策
        m_selectedGameObject.GetComponent<Button>().OnSelect(null);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment