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

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

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

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

Unity

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

Q&A

解決済

1回答

3296閲覧

[Unity2D] 特定の子オブジェクトをクリックした際に情報を取得したい

kadyu

総合スコア14

C#

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

Unity

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

0グッド

1クリップ

投稿2017/03/07 15:11

###前提・実現したいこと
現在Unity2Dにてデジタルカードゲームを制作しています。
Canvas->View->Handオブジェクト以下に手札の生成を行うスクリプトを作成しました。
生成されたカードをクリックした際に対象のカードの詳細画像を表示したいので、
まずは特定のオブジェクト(カード)がクリックされた際にクリックされた対象のオブジェクトの名前を
返すようなソースコードを作成しました。
作成したソースコードはCanvas外のGameControllerオブジェクトに追加しました。
※こちらを元に作成しました。http://qiita.com/yxuyxu/items/ffec547e9b93cfd2b99d

しかし、実行時複数のカードをクリックしても一つのカードしかログに表示されず、カード以外の場所をクリックしても一つのカードがクリックされたログしかでてきませんでした。
おそらく子オブジェクトにクリックしてアクセスする方法が間違っているのかなとは思います。

カードをクリックした際に対象のカード名(オブジェクト名)がログに表示され、カード以外をクリックした際には
何も反応しないようにしたいので、ご教示お願いします。

###該当のソースコード

C#

1using UnityEngine; 2 3public class ClickCard : MonoBehaviour 4{ 5 6 7 void Update() 8 { 9 if (Input.GetMouseButtonDown(0)) 10 { 11 Vector2 tapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); 12 Collider2D collition2d = Physics2D.OverlapPoint(tapPoint); 13 if (collition2d) 14 { 15 RaycastHit2D hitObject = Physics2D.Raycast(tapPoint, -Vector2.up); 16 if (hitObject) 17 { 18 Debug.Log("hit object is " + hitObject.collider.gameObject.name); 19 } 20 } 21 } 22 } 23}

###画像

![イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

この内容だとPhysics2D.OverlapPointは使用しなくてもいいのではないかと。
Physics2D.Raycastの部分だけで動作するはずです。
参考:「(:3[kanのメモ帳]:RayCastその4、Raycastを2Dで使う【Unity】

それ以外はぱっと見、合っているような気がします。
Debug.LogでtapPointが正しく取得出来ているか確認し、
その位置に「目的のオブジェクトが存在しているかどうか」と「オブジェクト0000102のColliderサイズは正常か」を確認してみてください。
(他のオブジェクトにColliderが付いていなかったり、オブジェクト0000102のColliderが他のColliderに被っている可能性があります)

投稿2017/03/09 08:37

sakura_hana

総合スコア11427

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

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

kadyu

2017/03/09 15:33

こちらとても参考になりました! 2Dと3DではRayの飛ばし方が異なることはしらなかったので勉強になりました。 ですが実は別の方法で独自解決してしまって…。 uGUIでカードを作成していたのでIPointerClickHandlerを使うことを失念していました。 私の場合は下記でクリックされたオブジェクト名を取得できたのでuGUIのオブジェクトを取得 するのに迷った方の助力になれば幸いです。 using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class Click : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData eventData) { Debug.Log(eventData.pointerPress.name); } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問