質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3586閲覧

Unity uGUI 重なったオブジェクトがクリックされたときの処理を呼び出したい

groggy_egg

総合スコア24

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/10/28 06:26

Unity2Dでメモ帳を作っています

こちらのHypertextを使い
リンクテキストのクリック時にイベントが呼ばれるようにして、
こちらを参考に
文字にタグをつけて表示するためにInputFieldとTextを重ねて実行しています。


TextとInputFieldは同サイズ、同位置

下面↑ Text ← 変換した文字を表示、Hypertextをアタッチ、リンクを表示
上面↓ InputField ←入力受け付け、透明
_____________↑タッチ操作


上記のHypertextではIPointerClickHandler.OnPointerClick()を使ってクリックを検知しているのですが、InputFieldオブジェクトに重なっていてTextオブジェクトのタッチが検知されません。

HypertextBase.cs

C#

1 void IPointerClickHandler.OnPointerClick(PointerEventData eventData) 2 { 3 var localPosition = CalculateLocalPosition(eventData.position, eventData.pressEventCamera); 4 5 for (var s = 0; s < spans.Count; s++) 6 { 7 for (var b = 0; b < spans[s].BoundingBoxes.Count; b++) 8 { 9 if (spans[s].BoundingBoxes[b].Contains(localPosition)) 10 { 11 spans[s].Callback(text.Substring(spans[s].StartIndex, spans[s].Length)); 12 break; 13 } 14 } 15 } 16 }

InputFieldは入力カーソルの移動や文字入力等の入力操作を受け付ける必要があるため表側に配置しています。
TextはURLなどのリンクテキストをクリックしたときにクリックイベントを呼び出せるようになっているのですが裏側にあるためタッチイベントが発生しません


表裏同時にタッチイベントを起こす、または表で受け取ったイベントを裏にも渡せばいいと思ったのですがやり方がわからず調べてもわかりませんでした。
(表側のRaycastをオフにするという方法→表のタッチがなくなるため×)
(OnPointerClickをpublicにしてみたがエラー)

詳しい方アドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらを参考に自己解決しました
https://hacchi-man.hatenablog.com/entry/2020/10/09/220000

呼ばれる側

C#

1 //OnPointerClickを呼び出す 2 public void callOnPointerClickEvent(PointerEventData eventData) 3 { 4 Debug.Log("click text"); 5 ExecuteEvents.Execute<IPointerClickHandler>(this.gameObject, eventData, (handler, ev) => handler.OnPointerClick((PointerEventData)ev)); 6 }

呼ぶ側

C#

1 void IPointerClickHandler.OnPointerClick(PointerEventData eventData) 2 { 3 Debug.Log("click input"); 4 text.callOnPointerClickEvent(eventData); 5 } 6

投稿2020/10/28 06:52

groggy_egg

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問