【Unity】プレイヤーのタッチが UI 用のゲームオブジェクトの上かどうかを判定する方法

Unity

はじめに

この記事ではプレイヤーが指やマウスで画面をタッチしたときにそのタッチした場所が UI 用のゲームオブジェクトの上かどうかを確認する方法を超絶ザックリとメモしておきます。
(UI かどうかを判定する方法というよりかはタッチしているゲームオブジェクトを取得する方法を知りたい方向けの記事かもしれません)

結論

いくつか方法はあるかと思いますが、特にこの記事の方法は非常に簡単なのでもう結論から書きます。

まず最初に Canvas 上の全ての UI 用のゲームオブジェクトに「UI」などの名前のタグを付けます。

あとは以下のような、タッチしているゲームオブジェクトのタグを比較する処理を作成するだけです。
タッチしている座標から Ray を飛ばしてその衝突先のゲームオブジェクトを取得するという処理を作るのが個人的に少し躓いた部分です。

private bool PlayerIsTouchingUI()
{
    Touch[] touches = Input.touches;

    for (int i = 0; i < touches.Length; i++)
    {
        PointerEventData pointData = new(EventSystem.current);

        pointData.position = touches[i].position;

        List<RaycastResult> rayResults = new();

        EventSystem.current.RaycastAll(pointData, rayResults);

        for (int j = 0; j < rayResults.Count; j++)
        {
            if (rayResults[j].gameObject.CompareTag("UI"))
                return true;
        }
    }

    return false;
}

最後に

参考記事

お問い合わせ

    タイトルとURLをコピーしました