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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kase
July 25, 2018
Programming
0
1.9k
【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
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
180
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
210
ロボットのための工場に灯りは要らない
watany
12
3.2k
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
420
Claude Codeログ基盤の構築
giginet
PRO
7
3.6k
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1k
存在論的プログラミング: 時間と存在を記述する
koriym
4
480
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
390
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
500
モダンOBSプラグイン開発
umireon
0
180
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
400
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
The SEO Collaboration Effect
kristinabergwall1
0
400
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Prompt Engineering for Job Search
mfonobong
0
220
How to build a perfect <img>
jonoalderson
1
5.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
330
Docker and Python
trallard
47
3.8k
Statistics for Hackers
jakevdp
799
230k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
250
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
170
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
ありがとうございました 懇親会、ぜひ話しかけてね!