トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity/uGUI】ButtonをClick押した瞬間に実行するにはEventTrigger/PointerDown【VR】

uGUIのButtonはクリックしてマウスを離したときに実行される。

VRのコントローラーだとトリガーを離した瞬間、タップだと手を離した瞬間。

これを押した瞬間にしたい。

対象のUIはマウスやVRでクリック入力するキーボード。配布する予定

 

普通のuGUIだと気にならないけど、キーボードのようなたくさんボタンを押して次のボタンに行くものは、押した瞬間にしないと、離したときには別のボタンの上にいて入力されないという問題があった。

EventTrigger/PointerDown

これをどうにかするには、uGUIのボタンをデフォルトのイベントを使わずEventTriggerのpinterDownを使えばできる

kan-kikuchi.hatenablog.com

こんな感じ。デフォルトのOnClickイベントは消す。

f:id:bibinbaleo:20200122144146p:plain

ただ個人的に問題があって、たくさんのボタンを一気に変えたいのにMulti-Object editingに対応してない!!!

デフォルトのイベントは、複数のButtonを選択した状態で共通の処理は一気に替えられるのに↓

f:id:bibinbaleo:20200122144141p:plain

EventTriggerだとできなかった!!!

f:id:bibinbaleo:20200122144144p:plain

30個ぐらいあるのに~~

めんどくせーーー

スクリプトで一気にEventTriggerつける

複数のオブジェクトに一気にEventTriggerを設定します。

docs.unity3d.com

www.hanachiru-blog.com

基本的にリファレンス通りにできた

using UnityEngine.EventSystems;
~
   public List<GameObject> _KeyObjList = new List<GameObject>();
    void Start()
    {
        foreach (GameObject keyObj in _KeyObjList)
        {
            keyObj.AddComponent<EventTrigger>();  //オブジェクトにEventTriggerをつける
            EventTrigger trigger = keyObj.GetComponent<EventTrigger>(); //オブジェクトにつけたEventTriggerを取得する

            EventTrigger.Entry entry = new EventTrigger.Entry(); //EventTriggerのイベントを作る?
            entry.eventID = EventTriggerType.PointerDown; //イベントの種類を設定
            entry.callback.AddListener((x) => //イベントの中身
            {
                クリックされたときの処理
            });

            trigger.triggers.Add(entry); //作ったイベントをEventTriggerにつける
        }

青のコメントは私の推測。クリックされたときの処理はラムダで書くんだね。

これでできた!スクリプトで処理するのでオブジェクトに目に見える形でEventTriggerがつくわけではない

VRコントローラーのクリック

今回使うのはコントローラーのTriggerなんだけど、コントローラーの設定で押した瞬間=Clickみたいにできないのかな?

VRTKは設定でできるけど、Oculus IntegratiionとXR Interaction Toolkitは少なくともデフォルトでの設定はできなさそうなので、UIをEventTriggerに変えるほうが配布するときは親切だと思いました。

マウスでクリックする際も設定変えられないと思うし。

VRTK

VRTKだと設定でできる。

コントローラーにつけるVRTK_UIPointerのClickMethodを「Click On Button Down」にすればいい。

f:id:bibinbaleo:20200123104223p:plain

Oculus Integratiion

分からない

OculusIntegrationはUIHelper>EventSystemについているOVRInputModuleのJoyPadClickButtonで入力を変えられるけど、TriggerDownみたいなのはない。

f:id:bibinbaleo:20200122141611p:plain

XR Interaction Toolkit

わからん!

HandControllerについているXRControllerのUIPressUsageでUIをクリックするものを決めているっぽい

f:id:bibinbaleo:20200123110100p:plain

最後に

強くなった