在我的项目中,我有一个按钮,此按钮具有一定的大小并且有孩子。我的问题是所述按钮的命中框太大了,您可以从它所显示的图像外部点击它。
为此,我想保留按钮附带的所有动画和事件,但我想缩小它的hitbox。通过仅允许在图像的非透明部分上调用OnClick事件或通过缩小矩形命中来缩小它是否可能?我在网上搜索过,发现没有任何关于缩小它的说法,只是扩大了它。
这是我的按钮的样子:
MyButton:Image,Button,Animator
标题:文字
乘数:文字
发光:图像,动画
当我按下按钮时,我改变了MyButton的图像并启用了它的动画图像,使其看起来发光。
有没有办法缩小按钮的命中箱?
谢谢。
答案 0 :(得分:0)
您可以通过将此脚本添加到所述按钮,然后向其添加某种2D对撞机来实现此目的。我用它来做一些不规则形状的按钮。你可以使用适合你按钮的任何碰撞器。请注意,还有一种方法可以使点击忽略透明部分,但我更喜欢这个。
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(RectTransform), typeof(Collider2D))]
public class Collider2DRaycastFilter : MonoBehaviour, ICanvasRaycastFilter
{
Collider2D myCollider;
RectTransform rectTransform;
void Awake()
{
myCollider = GetComponent<Collider2D>();
rectTransform = GetComponent<RectTransform>();
}
#region ICanvasRaycastFilter implementation
public bool IsRaycastLocationValid(Vector2 screenPos, Camera eventCamera)
{
var worldPoint = Vector3.zero;
var isInside = RectTransformUtility.ScreenPointToWorldPointInRectangle(
rectTransform,
screenPos,
eventCamera,
out worldPoint
);
if (isInside)
isInside = myCollider.OverlapPoint(worldPoint);
return isInside;
}
#endregion
}