Unity2Dでマウスの下にオブジェクトがあるか調べたい時はPhysics2D.Raycast
を使って調べることができます。
例えば、クリック時にCollider 2Dオブジェクトがあるか調べたい時は次のような感じで使います。
if (Input.GetMouseButtonDown(0))
{
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if (hit.collider != null)
{
// ここに実行したい内容を書きます
Debug.Log(hit.collider.name);
}
}
3D用のPhysics.Raycast
ではCollider 2Dのオブジェクトにヒットしないみたいです。2Dゲームを作る場合は気を付けてください。
リンク
Unity – Scripting API: Physics2D.Raycast
https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
関連記事
Collider2D.IsTouchingが常にfalseになってしまう場合
詳細はよく分かりませんが、静止状態でない場合にCollider2D.IsTouchingが正しく判定されないことがあるみたいです。
[Unity] collider.IsTouching(collider) が動いてる状態だとまともに動かない件。バグ?|Unity|エンジニアリングメモhttp://chusotudensi.blog.shinobi.jp/unity/-unity-%20c...
Unity2Dでオブジェクトへのクリックを取得する方法
Unity2Dでゲーム内に配置したオブジェクトをクリック(タップ)したい場合は、対象オブジェクトにCollider2D(BoxCollider2DとかCircleCollider2Dなど)を設定した上でPhysics2D.Raycastを使って実装できます。
サンプル
void Update()
{
if (Input.GetMouseButtonDown(0))
{
...
UIとGameObjectが重なっている場合の判定方法
Raycastを使ってGameObjectの選択をしているプログラムで、UIとGameObjectが重なっている場合に使える方法。
using UnityEngine.EventSystems
EventSystem.current.IsPointerOverGameObject()
リンク
How to make UI block raycats (mobile) | Un...
UnityのUIでDrag and Drop
IBeginDragHandler, IDragHandler, IDropHandlerを継承するとOnBeginDrag, OnDrag, OnDropが使えようになるそうです。
public class Example : MonoBehaviour, IBeginDragHandler, IDragHandler, IDropHandler
{
public void OnBe...
UnityのスクリプトでUIを最前面や最背面に移動する方法
UnityのCanvas内に複数のUIがある場合、Hierarchyの順に重なって表示されるようになっています。 これを前面や背面に移動させたい場合は、Transform.SetAsLastSiblingやTransform.SetAsFirstSiblingを使うと良いそうです。
// 最前面に移動
GetComponent<RectTransform>().SetAsLastSi...
文字列に合わせたUI.Textのサイズを取得する方法
UnityのUI.Textで、実際にテキストを表示した際のサイズが知りたい場合はpreferredWidthやpreferredHeightを使って調べることができるそうです。
使い方
Text text;
float width = text.preferredWidth;
float height = text.preferredHeight;
テキストのサイズに合わせて...