您可以通过将此脚本添加到所述按钮然后添加某种类型的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
}
你知道如何让点击忽略透明部分吗?我在网上找到任何类似的东西都没有成功。 – Alox
老实说,它更便宜,更好地使用这种解决方案。为了忽略alpha部分,你需要创建一个遮罩纹理等等。即使你的按钮有一些奇怪的形状,你也可以为它设置一个多边形对撞机,并且工作得很好,没有任何性能下降。但如果你感兴趣的解决方案可以在这里找到:[链接](https://forum.unity3d.com/threads/none-rectangle-shaped-button.263684/#post-1744521) –
嗯,并没有办法访问(我假设正在控制按钮hitbox)按钮使用的Collider2D的大小? – Alox