Unity 4.6(新UI):单击复杂图像的按钮

时间:2014-12-24 21:35:37

标签: image user-interface button unity3d click

我有一个带有复杂图像的按钮(Canvas> Panel> Button)(不是正方形),这里的问题是我希望它在我点击图像时执行点击事件(不包括图像部分)没有不透明度)但由于新的UI不能与碰撞器一起使用,我无法实现与多边形碰撞器可以实现的相同的点击行为,并且在按钮(图像)的外部点击它是完全错误的cero(0)并仍然执行点击事件..

我希望我的问题很清楚,有人可以帮助我,提前谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,Unity应该有一个选项来实现这个目标,但至少可以完美地运行:http://forum.unity3d.com/threads/none-rectangle-shaped-button.263684/#post-1744521

答案 1 :(得分:0)

我找到了另一个(可能更好)解决这个问题的方法。我使用Collider2DPolygonCollider2D)来定义可点击的形状,然后使用此RaycastFilter:

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
}

使用对撞机有点hacky但结果更简单,可能更快,并且更容易调整可点击的形状。

可以通过创建替换Collider2D的自定义替代方案来改进这一点,但这对于我需要的工作来说有点太多了。