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
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
6.7k
Devvox Belgium - Agentic AI Patterns
kdubois
1
140
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
190
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
280
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
490
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
630
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
340
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
540
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
45k
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
140
EMこそClaude Codeでコード調査しよう
shibayu36
0
370
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Speed Design
sergeychernyshev
32
1.2k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
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
ありがとうございました 懇親会、ぜひ話しかけてね!