Image の alphaHitTestMinimumThreshold を 0以上にすればタップした際に有効な Alpha の値を変更できる
alphaHitTestMinimumThreshold を 1にすると半透明な部分のタップが無効化される
しかしテクスチャが半透明かどうか判定するために Read/Write Enable を有効にし
SpriteMeshType を FullRect にする必要がある
そのため、有効 Alpha 値を変更したタイミングで テクスチャの設定を変更する処理も行っている
using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Image))] public class ImageHitAlpha : MonoBehaviour { [SerializeField, HideInInspector] private Image _image; [SerializeField, Range(0f, 1f)] private float _threshold = 0f; #if UNITY_EDITOR private void Reset() { _image = GetComponent<Image>(); _image.alphaHitTestMinimumThreshold = _threshold; } private void OnValidate() { _image.alphaHitTestMinimumThreshold = _threshold; if (_image.sprite == null) return; if (_threshold <= 0f) return; // GetPixel をするためにReadWriteが有効である必要がある var path = UnityEditor.AssetDatabase.GetAssetPath(_image.sprite); var importer = UnityEditor.AssetImporter.GetAtPath(path) as UnityEditor.TextureImporter; if (!importer.isReadable) { importer.isReadable = true; UnityEditor.EditorUtility.SetDirty(_image.sprite); UnityEditor.AssetDatabase.SaveAssets(); } var settings = new UnityEditor.TextureImporterSettings(); importer.ReadTextureSettings(settings); if (settings.spriteMeshType != SpriteMeshType.FullRect) { settings.spriteMeshType = SpriteMeshType.FullRect; importer.SetTextureSettings(settings); importer.SaveAndReimport(); } } #endif }