おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

Unity - uGUI ボタン画像よりも大きなタッチ反応領域をつくる(2020年版)

以前、ボタンの画像よりも大きくタッチ範囲領域を作ったのがこの方法。

大きい画像を透過にして仕込む

unity2d.hateblo.jp まぁ、uGUIは画像がタッチ範囲なので、もうちょっと大きい画像を新たに作って透過にしちゃえ。 という、まぁ、ちょっとスマートではないやり方でした。

もう時代は令和なので、もうちょっと別の方法も。

スクリプトを使って子オブジェクトのtransformを使う

ひとつは、テラシュールさんで紹介している、子のGameObjectのtransformを当たり判定にしてしまうスマートなやり方。 紹介されているスクリプトをボタンの子オブジェクトに追加すればあっという間に出来上がり。 tsubakit1.hateblo.jp ただ、記述されている関数が廃止になっているため、現状の書き方に変えてあげる必要があります。

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif

namespace UnityEngine.UI
{
    public class GraphicCast :Graphic
    {
        protected override void OnPopulateMesh(VertexHelper vhelper)
        {
            base.OnPopulateMesh(vhelper);
            vhelper.Clear();
        }

#if UNITY_EDITOR
        [CustomEditor(typeof(GraphicCast))]
        class GraphicCastEditor :Editor
        {
            public override void OnInspectorGUI()
            {
            }
        }
#endif
    }
}

Unity2020を使う

そして、Unity2020を使う方法。現時点でUnityの最新が2020.1.16ですが、 こちらを使うと、そもそもImage自体にRaycast Paddingという属性が存在します。

f:id:xev:20201209113646p:plain
Raycast Padding

こちらは文字通り画像のサイズを調整できます。 広げたいときはPaddingに負の値を指定して広げる。判定の範囲を縮めたければ正の数を設定。 それだけで、タッチ範囲を調整できます。

Cool。

以上、uGUIのボタンタッチ範囲を調整する方法でした。