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.8k
【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
Cell-Based Architecture
larchanjo
0
150
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
200
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
5
1.5k
Grafana:建立系統全知視角的捷徑
blueswen
0
250
AIエージェントの設計で注意するべきポイント6選
har1101
6
2.7k
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
430
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
320
Basic Architectures
denyspoltorak
0
140
認証・認可の基本を学ぼう後編
kouyuume
0
260
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
510
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
230
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
150
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Odyssey Design
rkendrick25
PRO
0
450
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
120
The Curse of the Amulet
leimatthew05
0
6.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
210
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Site-Speed That Sticks
csswizardry
13
1k
The browser strikes back
jonoalderson
0
240
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
ありがとうございました 懇親会、ぜひ話しかけてね!