Unity3d中制作触发区域为圆形的按钮

一、常规矩形的Button制作

设置Highlighed Color为绿色。

此时当鼠标在button上方时会显示绿色:

二、圆形Button制作

在Button的Image中选择Source Image为Knob。

程序运行时,鼠标在矩形和圆形之间的区域,button还是会变成绿色。

所以,这种方法只是改变了Image的展示,但是并没有改变触发区域。

三、重写Image组件的触发区域

参考代码:新手问个可能很低级的问题,圆形按钮怎么做,uGUI默认都是矩形【unity3d吧】_百度贴吧

创建CustomCircleCollider脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CustomCircleCollider : Image
{
	private CircleCollider2D circleCollider;

    protected override void Start()
    {
        base.Start();
        circleCollider = GetComponent<CircleCollider2D>();
    }


    public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
    {
        bool isRay = base.IsRaycastLocationValid(screenPoint, eventCamera);

        if(isRay && (circleCollider != null))
        {
            bool isTrig = circleCollider.OverlapPoint(screenPoint);
            return isTrig;
        }
        return isRay;
    }

}

我们把这个脚本挂载到button对象上,提示:

这是因为一个物体下只能挂载一个类型的组件一次,此时需要删除原来的Image组件(反勾选是没用的)。

然后:

(1)挂载CustomCircleCollider脚本到Button物体上,并修改Source Image的信息如下:

(2)添加Circle Collider 2D的组件,并编辑碰触区域。

运行程序,此时只有点击Button中的红色区域才会变绿。

collider的类型可以根据实际情况调整,比如换成Capsule collider等,这里只是演示效果。

四、注意事项

脚本中Start函数必须写成示例中的形式:

protected override void Start()

如果只是写成:void Start(),则会报如下的错误:

Warning CS0114 ‘CustomCircleCollider.Start()’ hides inherited member ‘UIBehaviour.Start()’. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword.

这个提示我们必须重写Start函数。

猜你喜欢

转载自blog.csdn.net/benben044/article/details/142091350