当前位置: 首页 > article >正文

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


http://www.kler.cn/a/302869.html

相关文章:

  • Excel筛选的操作教程
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • CentOS 服务
  • Wireshark
  • gdb编译教程(支持linux下X86和ARM架构)
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
  • YOLOv5-6.x源码分析----数据集创建之dataloaders.py
  • 【Python 千题 —— 算法篇】寻找最长回文子串
  • JavaWeb【day11】--(SpringBootWeb案例)
  • Android APK插件化:DynamicAPK技术如何改变游戏规则
  • linux安装redis、使用redis、用springboot连接redis
  • DataWind将string类型转化为int类型的报错解决
  • 全国智能网联招标项目一周速览(2024年9月13日)
  • leetcode练习 子集
  • HTML中的零宽字符
  • C# 异步编程中的 SynchronizationContext:掌握上下文同步的艺术
  • 源码编译llama.cpp 、ggml 后端启用自定义BLAS加速
  • 【STM32】独立看门狗(IWDG)原理详解及编程实践(上)
  • [网络][CISCO]CISCO IOS升级
  • 走进低代码表单开发(一):可视化表单数据源设计
  • Redis 入门 - C#|.NET Core客户端库六种选择
  • C++ | Leetcode C++题解之第389题找不同
  • 说真心话,在IT行业,项目经理不懂「敏捷管理」真混不下去!
  • 就服务器而言,ARM架构与X86架构有什么区别?各自的优势在哪里?
  • EP10 全局渐变背景色
  • Android Jetpact Lifecycle 解析