UGUI制作圆形UI

本文介绍了如何在Unity中使用UGUI制作圆形UI,包括使用Mask的方法及其缺点,以及通过重写Image组件的OnPopulateMesh方法来避免锯齿并减少Draw Call。此外,还详细阐述了如何实现对圆形UI的精确点击响应,通过射线法判断点击位置是否在图形内,提供了一种有效解决点击判断问题的方法。最后提到了UGUI原生支持不规则图形点击响应的解决方案——使用Polygon Collider 2D组件。

源代码

使用Mask来制作

创建两个具有父子关系的Image,父物体添加Mask组件,精灵是一个圆形的遮罩,子物体是要显示的图片。
在这里插入图片描述
这样做有两个坏处:
1.圆形UI的锯齿感非常强烈
2.增加了Draw Call
在这里插入图片描述

重写Image组件的OnPopulateMesh方法来实现

我们通过自己计算圆形UI的顶点来实现圆形UI的绘制。当然,这个圆形是通过大量的三角片拼接而成。
toFill就是要绘制这个图形所需要的顶点数据。

    /// <summary>
    /// 圆形由多少个三角块拼成
    /// </summary> 
    [SerializeField]
    private int segements = 100;
    /// <summary>
    /// 显示出来的百分比
    /// </summary>
    [SerializeField]
    private float percent = 1;
    private List<Vector2> _vertexList = new List<Vector2>();
    protected override void OnPopulateMesh(VertexHelper toFill)
    {
   
   
        toFill.Clear();
        AddVertex(toFill);

        for(int i = 1; i <= segements; i++)
        {
   
   
            toFill.AddTriangle(i, 0, i + 1);
        }
    }

我们通过AddVertex来想toFill中添加顶点数据,再通过AddTriangle来进行三角形的绘制。

    private void AddVertex(VertexHelper toFill)
    {
   
   
        //获得Rect长宽和需要显示为亮的三角片的数量
        float width = rectTransform.rect.width;
        float height = rectTransform.rect.height;
        int whiteSegement = (int)(segements * percent);

        //计算原点的uv和uv与长宽的换算关系
        Vector4 uv = overrideSprite != null ? DataUtility.GetOuterUV(overrideSprite) : Vector4.
代码下载地址: https://pan.quark.cn/s/a48c006483de 在Java编程领域,构建两个能够交互的聊天窗口被视为一个典型的多线程及网络通信的应用范例。本指南将阐述如何借助Java的相关技术来达成这一目标。 为了有效执行此任务,必须熟悉基础的Java GUI(图形用户界面)组件,例如JFrame、JTextArea、JTextField等,这些组件是构建聊天窗口界面的关键元素。其中,JFrame承担主窗口的角色,JTextArea用于展示聊天记录,而JTextField则作为输入装置,用户在此区域键入信息。 1. **构建聊天窗口**: - 借助JFrame建立两个独立的聊天窗口,每个窗口内嵌一个JTextArea用以显示聊天历史,并配备一个JTextField供用户输入消息。 - 应用setDefaultCloseOperation()方法设定窗口的关闭行为,比如(JFrame.EXIT_ON_CLOSE),以此保障程序的正常终止。 2. **多线程处理**: - 在Java环境中,通常通过Thread类或Runnable接口来启动线程。针对此应用场景,可以设立一个线程专门负责消息的发送功能,同时另一个线程则负责接收消息。 - 发送线程:实时监控用户在JTextField中的输入状态,一旦用户按下回车键,即捕获输入的消息并执行发送操作。 - 接收线程:持续从服务器获取消息,并实时更新对应的JTextArea内容。 3. **网络通信机制**: - Java的Socket编程是实现客户端与服务器之间通信的核心技术。我们需要建立Socket实例以连接服务器,同时使用ServerSocket实例在服务器端监控客户端的接入请求。 - 客户端:...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值