Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【gotanda.unity #7】uGUIのインプット拡張してる?
Search
kase
July 25, 2018
Programming
0
1.7k
【gotanda.unity #7】uGUIのインプット拡張してる?
登壇者:かせ(
https://twitter.com/KaseliaePenguin
)
kase
July 25, 2018
Tweet
Share
More Decks by kase
See All by kase
ゲーム案件にZenjectを導入した経験を語る
kaseliaepenguin
1
12k
Other Decks in Programming
See All in Programming
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
CSC509 Lecture 12
javiergs
PRO
0
160
Macとオーディオ再生 2024/11/02
yusukeito
0
370
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
690
as(型アサーション)を書く前にできること
marokanatani
10
2.7k
Jakarta EE meets AI
ivargrimstad
0
190
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
480
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
920
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.1k
イベント駆動で成長して委員会
happymana
1
320
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Automating Front-end Workflow
addyosmani
1366
200k
How to Ace a Technical Interview
jacobian
276
23k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How STYLIGHT went responsive
nonsquared
95
5.2k
What's new in Ruby 2.0
geeforr
343
31k
How GitHub (no longer) Works
holman
310
140k
Done Done
chrislema
181
16k
For a Future-Friendly Web
brad_frost
175
9.4k
Transcript
uGUIのインプット拡張してる? Gotanda.unity #7 かせ @KaseliaePenguin
None
がっつりエンジニア向けの話です 詰め込んでます、ごめんね
EventSystemsって知ってますか? タップやドラッグの判定を管理しています uGUIの各コンポーネントに対して通知を送ってくれます Canvasを作成すると自動で作られます
None
通知について・1 Canvas以下に存在するオブジェクトの、Graphicクラスを見て通知を送ります Graphicクラスは uGUI用の基底クラスです
通知について・2 Graphicクラスには RaycastTarget というプロパティがあります RaycastTarget がtrueの時、オブジェクトに対して通知が送られます
Imageコンポーネントの例
uGUIのButtonってどういう仕組み?
生成するとこんな感じ
Buttonとは Graphicクラスを継承したImageコンポーネントのRaycastTargetがtrueの時 オブジェクトに対して送られてくる OnPointerDown という通知を使ってクリックされた判定を取っているのです
じゃあ自分のクラスで通知受け取りたいよ! っていう話の前に 本当に通知の仕組みが合っているのか確かめてみよう
ImageのRaycastTargetをオフに・・・
おん?
ヒエラルキーを見てみる Buttonの子供になんかいますね
Textを見てみる
1.親子関係のあるオブジェクトで 2.子供もGraphicクラスを持っていて 3.子供のRaycastTargetがtrueで 4.子供が通知を受け取る仕組みを持っていなかった場合
通知は親に対してブロードキャストされます!!! 気を付けよう
ここまで前置きなんです。。。
OnPointerDown Graphic領域内をタップ 、クリックすると通知される
OnPointerUp OnPointerDownが通知された後 指を離すと通知される オブジェクトが非アクティブの時は通知されない
OnPointerEnter Graphic領域内に触っている判定が入ると通知される スマホとかはドラッグした時とか、領域内をタップしたとき PCはカーソルがフォーカスしてるかどうか
OnPointerExit Graphic領域外に出た時に通知される(色々略)
OnInitializePotentialDrag Graphic領域内で、タップされた際に通知される OnPointerDownと同じタイミング
OnBeginDrag Graphic領域内で EventSystemsのDrag Thresholdの値以上 ドラッグすると通知される
OnDrag OnBeginDragが呼ばれた後 指を動かすと毎回通知される
OnEndDrag Drag中に指を離すと通知される オブジェクトが非アクティブだと通知されない
他にもいろいろあるんじゃが この世界で生まれいづる仕様は ほぼ全てこれでカバーできるじゃろう
自分のクラスでそれ受け取りたいよ
PointerEventData 通知の引数で渡ってくる ユニークなタップIDやポジションの情報が入っている
拡張したら何ができる? ボタンの長押し 複数ボタンにまたがる連打防止 ドラッグするとバナーとかが切り替わるアレ ゲームパッドのインプットとスマホのインプット機能の共通化 etc
ここから拡張トラブル実例集
OnPointerDown中に他の指でタップされる 同じ領域を他の指でタップされるとOnPointerDownが二回走る PointerEventDataのpointerIdをキャッシュ 処理の最初でバリデーションして弾こう
非アクティブ中に指を離す or 離さない 長押し機構とか作って、ある程度数値上昇させたら非アクティブにするとか 非アクティブ中に離すとOnPointerUpとOnEndDragが呼ばれない 非アクティブ -> 再度アクティブで指を押しっぱなしにすると呼ばれる
非アクティブ中に指を離す or 離さない 非アクティブになったらOnDisableで初期化する 押しっぱなしで再度アクティブになるとOnDragなどが走るので 非アクティブ初期化が走っていたら復帰処理をする
ドラッグ中にアプリがバックグラウンドに OnEndDragが呼ばれない OnApplicationPauseでドラッグを強制終了させる Unity 2018.2から呼ばれるようになるらしい 対応してたら気を付けろ
RaycastTargetを切っても通知が来る 通知のブロードキャストのせい 拡張クラスのAwakeで子供のGraphicコンポーネントを検索して RaycastTargetを切る
動的に子オブジェクトを追加する Graphic.RaycastTargetの初期値はtrue 都度RaycastTargetは切る
時間がないので ここまで!
もっと話せること EventSystemにくっついてくるInputModuleを拡張する ScrollRectをベースに拡張して音ゲーのセレクト画面ぽいのを作る etc
ありがとうございました 懇親会、ぜひ話しかけてね!