我有一个带有复杂图像的按钮(Canvas> Panel> Button)(不是正方形),这里的问题是我希望它在我点击图像时执行点击事件(不包括图像部分)没有不透明度)但由于新的UI不能与碰撞器一起使用,我无法实现与多边形碰撞器可以实现的相同的点击行为,并且在按钮(图像)的外部点击它是完全错误的cero(0)并仍然执行点击事件..
我希望我的问题很清楚,有人可以帮助我,提前谢谢。
答案 0 :(得分:1)
我找到了一个解决方案,Unity应该有一个选项来实现这个目标,但至少可以完美地运行:http://forum.unity3d.com/threads/none-rectangle-shaped-button.263684/#post-1744521
答案 1 :(得分:0)
我找到了另一个(可能更好)解决这个问题的方法。我使用Collider2D
(PolygonCollider2D
)来定义可点击的形状,然后使用此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
的自定义替代方案来改进这一点,但这对于我需要的工作来说有点太多了。