Unity2Dでゲーム内に配置したオブジェクトをクリック(タップ)したい場合は、対象オブジェクトにCollider2D
(BoxCollider2D
とかCircleCollider2D
など)を設定した上でPhysics2D.Raycast
を使って実装できます。
サンプル
void Update()
{
if (Input.GetMouseButtonDown(0))
{
var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var hit = Physics2D.Raycast(mousePosition, Vector2.zero);
if (hit.collider != null)
{
// クリック位置にオブジェクトがある場合に実行したい処理
Debug.Log(hit.collider.name);
}
}
}
※3D用のCollider
と混同しないように気を付けてください。
リンク
Unity – Scripting API: Physics2D.Raycast
https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
Unity – Scripting API: Collider2D
https://docs.unity3d.com/ScriptReference/Collider2D.html
関連記事
UnityでマウスがUI上にあるかどうかチェックするスクリプト
Unityでは、Physics.Raycastを使ってマウスがオブジェクト上にあるかどうか調べることができます。
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit)) {
// 処理したい内容
}
ただし、上...
Unity2Dでマウスの下にオブジェクトがあるか調べる方法
Unity2Dでマウスの下にオブジェクトがあるか調べたい時はPhysics2D.Raycastを使って調べることができます。
例えば、クリック時にCollider 2Dオブジェクトがあるか調べたい時は次のような感じで使います。
if (Input.GetMouseButtonDown(0))
{
RaycastHit2D hit = Physics2D.Raycast(Camer...
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;
テキストのサイズに合わせて...