• 【Unity3D日常开发】Unity3D中实现不规则Button按钮的精准响应


    推荐阅读

    大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

    一、前言

    在使用Unity3D开发中,可能会遇到制作不规则形状的按钮响应。

    但是Unity3D中的Button按钮是长方形的按钮,就算是改变Button按钮的Image组件去改变Sprite也只是实现外观上的形状,实际还是可以响应空白区域,比如:

    在这里插入图片描述

    二、解决方案

    方案一、改写Image,让Image通过有没有点击到碰撞器来响应

    (1)新建MyImage.cs脚本,编写代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class MyImage : Image
    {
        public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
        {
            //原来是通过响应射线来判断点击到Image
            //return base.IsRaycastLocationValid(screenPoint, eventCamera);
            //改成通过射线判断点击到Collider2D
            return GetComponent<Collider2D>().OverlapPoint(screenPoint);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    (2)将脚本附给Button对象:

    在这里插入图片描述
    (3)给Button对象添加Polygon Collider2D组件,点击EditCollider按钮去编辑区域:
    在这里插入图片描述
    修改边缘:
    在这里插入图片描述
    (4)运行测试:

    在这里插入图片描述

    方案二、改写Image,限制射线检测生效的alpha值

    (1)新建MyImage.cs脚本,编写代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class MyImage : MonoBehaviour
    {
        private Image image;
    
        private void Start()
        {
            image = transform.GetComponent<Image>();
            image.alphaHitTestMinimumThreshold = 0.1f;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    (2)将脚本附给Button对象:

    在这里插入图片描述
    (3)打开图片的读写权限:
    在这里插入图片描述
    (4)运行测试:
    请添加图片描述

    三、后记


    你的点赞就是对博主的支持,有问题记得留言:

    博主主页有联系方式。

    博主还有跟多宝藏文章等待你的发掘哦:

    专栏方向简介
    Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
    Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
    Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
    Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
    Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
    Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
    Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
    Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
    Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
  • 相关阅读:
    【HarmonyOS】【JAVA UI】自定义通知的实现
    写作技巧网站或工具
    微服务面试
    MySql基础一之【了解MySql与DBeaver操作MySql】
    2022-06-27 网工进阶(十二)IS-IS-开销类型、开销计算、LSP的处理机制、路由撤销、路由渗透
    基于深度学习网络的疲劳驾驶检测算法matlab仿真
    TF坐标变换
    Redis设置开机自启动
    HDLbits exercises 5 (BASIC GATES节选题)
    网络安全必学SQL注入
  • 原文地址:https://blog.csdn.net/q764424567/article/details/128189984