2016-12-01 89 views
0

在我的项目中,我有一个按钮,这个按钮是一定的大小,并有孩子。我的问题是,该按钮的hitbox太大,你可以从它显示的图像外点击它。如何缩小按钮hitbox

为此,我想保留所有带有按钮的动画和事件,但我想缩小它的hitbox。通过仅允许在图像的非透明部分上调用OnClick事件或通过缩小矩形命中来缩小它可能吗?我在网上搜索,发现无处不在缩小它,只是扩大它。

这里是我的按钮看起来像:

  • 为myButton:图片,按钮,动画

    • 标题:文本

    • 乘数:文本

    • 夜光:图片,动画

当我按下按钮,我改变myButton的形象,使发光的形象与它的动画,使得它看起来发光。

有没有缩小按钮的hitbox的方法?

谢谢。

回答

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 
} 
+0

你知道如何让点击忽略透明部分吗?我在网上找到任何类似的东西都没有成功。 – Alox

+0

老实说,它更便宜,更好地使用这种解决方案。为了忽略alpha部分,你需要创建一个遮罩纹理等等。即使你的按钮有一些奇怪的形状,你也可以为它设置一个多边形对撞机,并且工作得很好,没有任何性能下降。但如果你感兴趣的解决方案可以在这里找到:[链接](https://forum.unity3d.com/threads/none-rectangle-shaped-button.263684/#post-1744521) –

+0

嗯,并没有办法访问(我假设正在控制按钮hitbox)按钮使用的Collider2D的大小? – Alox