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.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
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
420
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
230
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.2k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
240
How to stabilize UI tests using XCTest
akkeylab
0
110
AWS Infrastructure as Code の新機能 2025 総まとめ 〜SA 4人による怒涛のデモ祭り〜
konokenj
10
3.3k
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
220
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
850
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
760
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
250
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
370
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
110
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
330
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
850
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
670
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Documentation Writing (for coders)
carmenintech
77
5.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
GraphQLとの向き合い方2022年版
quramy
50
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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
ありがとうございました 懇親会、ぜひ話しかけてね!