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函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值