U3D圆形图片

Unity里面如何实现圆形图片呢?

1.可以使用 Mask 来实现。
但是会有额外的 DrawCall ,使用 Mask 明显会增加 4 个 DrawCall 。
Mask 本身占 2 个,上下两层各占一个(如果能合批的话)。
Mask实现原理
通过 GPU 的 Shader 实现,第一个 DrawCall 是一个在底层模板绘制一个区域的指令,根据 Image 传进来图片的a值,确定裁剪区域。之后 Mask 节点下面的元素会根据这个区域计算Alpha的值,最后一个 Mask 是绘制区域结束的指令。

2.自定义 MaskGraphic 组件。
Image组件默认以矩形形式渲染。
只需重写圆形形状的渲染顶点、三角面片信息,根本不需要Mask就能渲染出圆形Image。

通过重写 OnPopulateMesh 方法,来自定义顶点信息。
代码如下:

public class CircleImage : Image
{
    //分割的片段数
    public int segements = 20;

    /// <summary>
    /// UI元素生成顶点数据时调用
    /// </summary>
    protected override void OnPopulateMesh(VertexHelper vh)
    {
        vh.Clear();

        //圆点
        var pivot = this.rectTransform.pivot;
        var rect = this.rectTransform.rect;
        Vector2 center = new Vector2((rect.width * (0.5f - pivot.x)), (rect.height * (0.5f - pivot.y)));
        vh.AddVert(CreateUIVertex(center, new Vector2(0.5f, 0.5f), this.color));

        float  radius = rect.width / 2f;
        //每段的弧度
        float radians = Mathf.PI * 2 / this.segements;
        int count = this.segements;
        //每一个圆弧上的顶点
        for (int i = 0; i < count; i++)
        {
            float angdeg = radians * i;
            float x = center.x + radius * Mathf.Cos(angdeg);
            float y = center.y + radius * Mathf.Sin(angdeg);
            float uvX = (radius * Mathf.Cos(angdeg) + radius) / (2 * radius);
            float uvY = (radius * Mathf.Sin(angdeg) + radius) / (2 * radius);
            vh.AddVert(CreateUIVertex(new Vector3(x, y), new Vector2(uvX, uvY),  color: this.color));
        }

        for (int i = 0; i < count; i++)
        {
            int id0 = 0;
            int id1 = i + 2;
            if (id1 > count)
            {
                id1 %= count;
            }
            int id2 = i + 1;
            vh.AddTriangle(id0, id1, id2);
        }
    }

    public UIVertex CreateUIVertex(Vector3 position, Vector2 uv0, Color color)
    {
        UIVertex uiVertex = new UIVertex()
        {
            position = position,
            uv0 = uv0,
            color = color
        };

        return uiVertex;
    }
}

注意要点:
1.对中心点要进行参与计算。
2.UV的坐标是0-1的。
3.三角面的顺序是顺时针的。

小技巧:
1.也可以实现类似技能的CD效果,只需添加一个角度,大于此角度显示正常颜色,小于此角度显示黑色。
2.边缘锯齿可通过外层覆盖解决。
3.边缘锯齿也可以通过透明度来解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: U3D Slider 形是一种通过 Unity3D 引擎实现的滑块控件,其外形呈现为一个形。该控件通常被应用在需要进行数值选择或区间选择的场合,通过滑动形进行数值或区间的选择,是一种常见的交互方式。 与传统的滑块控件相比,U3D Slider 形在视觉效果上更加美观,同时也更符合现代化 UI 设计的趋势。在使用过程中,用户可以通过拖动形控制器进行数值或区间的选择,同时也可以通过设置参数,自定义该控件的外观和交互方式。 在 U3D Slider 形使用过程中,开发者需要自行编写脚本来实现数值或区间的计算与显示,同时也可以根据需求,进行扩展和定制化。这一控件在游戏开发、数据可视化等领域都有广泛应用,为用户提供了一种直观、方便的数据选择方式,具有较高的实用价值。 ### 回答2: U3D Slider 形指的是一种在Unity引擎中使用的一个可调节的滑动条组件,它的外形是形的。 在游戏开发中,这个组件通常被用来控制一些游戏元素的数值大小,例如音乐的音量大小、游戏难度的设置、游戏物品的数量、角色属性的加减等等,因此可以为玩家提供更好的游戏体验。 U3D Slider 形组件的使用非常简单,只需要在Unity编辑器中将它拖拽到场景或其他UI界面中即可。通过调整组件的属性设置,可以更好地满足游戏开发的需求。 总的来说,U3D Slider 形在游戏开发中是一个非常有用的UI组件,它简单易用、适应性强,可以为游戏提供良好的交互体验。同时,在开发过程中,我们也可以通过修改组件的样式、颜色、大小等属性来适应不同的游戏需求,更好地使游戏与玩家互动。 ### 回答3: U3D Slider形是一种在Unity 3D游戏引擎中使用的滑动条。与传统的滑动条不同,它采用了形的外观设计,使得用户更加直观地理解滑动的方向和数值变化。这种设计也更加符合现代用户对于视觉效果的要求。 U3D Slider形的使用很简单,只需要在场景里添加一个Slider控件,然后选择Slider的样式为形即可。当用户拖动形Slider时,Slider上方会显示当前数值。开发者可以根据自己的需求对Slider进行自定义,包括大小、颜色、数值范围等。 在游戏开发中,U3D Slider形可以被用于控制一些关键参数,比如游戏音量、游戏难度级别等等。也可以用于实现一些动态效果,如实时调整游戏中角色的大小、旋转角度等等。 总之,U3D Slider形是一种简单、易用的UI控件,它可以为游戏开发者提供更好的用户体验和操作效率,帮助开发者更好地实现游戏中各种功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值