You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何将矩形Sprite转换为圆形显示?

将Sprite转为圆形显示的几种实用方法

下面是几种能快速实现Sprite圆形显示的方案,按需选择:

方法一:使用Mask遮罩(最简单直观)

  • 创建一个圆形Image作为遮罩:
    1. 在Sprite所在的GameObject下新建一个Image对象
    2. 给这个Image选择圆形Sprite(或用代码生成圆形纹理),颜色随意(遮罩仅识别Alpha通道)
    3. 给该Image添加Mask组件,取消勾选「Show Mask Graphic」(避免遮罩图形本身显示)
  • 将头像Sprite所在的Image/SpriteRenderer放到Mask对象的子节点下,确保两者RectTransform的大小、位置完全对齐
  • 完成设置后,仅遮罩圆形区域内的Sprite内容会显示,外部将被自动裁剪

方法二:使用自定义Shader(性能更优,适合大量头像场景)

如果项目中存在大量圆形头像,Shader方案比Mask性能更出色(Mask会额外增加Draw Call),以下是基础圆形裁剪Shader:

Shader "Custom/CircleSprite"
{
    Properties
    {
        _MainTex ("Sprite Texture", 2D) = "white" {}
        _Color ("Tint", Color) = (1,1,1,1)
        _Radius ("Circle Radius", Range(0, 0.5)) = 0.5
        _Center ("Circle Center", Vector) = (0.5,0.5,0,0)
    }

    SubShader
    {
        Tags
        { 
            "Queue"="Transparent" 
            "IgnoreProjector"="True" 
            "RenderType"="Transparent" 
            "PreviewType"="Plane"
            "CanUseSpriteAtlas"="True"
        }

        Cull Off
        Lighting Off
        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
        {
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata_t
            {
                float4 vertex   : POSITION;
                float4 color    : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex   : SV_POSITION;
                fixed4 color    : COLOR;
                float2 texcoord  : TEXCOORD0;
            };

            fixed4 _Color;
            sampler2D _MainTex;
            float _Radius;
            float2 _Center;

            v2f vert(appdata_t IN)
            {
                v2f OUT;
                OUT.vertex = UnityObjectToClipPos(IN.vertex);
                OUT.texcoord = IN.texcoord;
                OUT.color = IN.color * _Color;
                return OUT;
            }

            fixed4 frag(v2f IN) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, IN.texcoord) * IN.color;
                float2 dist = IN.texcoord - _Center;
                float len = length(dist);
                col.a *= step(len, _Radius);
                return col;
            }
        ENDCG
        }
    }
}

使用步骤:

  1. 将上述代码保存为CircleSprite.shader并导入Unity
  2. 给Sprite对应的材质选择该自定义Shader
  3. 在材质面板调整Circle Radius和Center参数,适配头像尺寸

方法三:代码裁剪纹理(适合需要导出圆形纹理的场景)

如果需要直接生成圆形纹理文件而非实时裁剪,可使用C#代码处理:

using UnityEngine;
using System.IO;

public class SpriteCircleCutter : MonoBehaviour
{
    public Sprite originalSprite;
    public float circleRadius = 0.5f;
    public Vector2 circleCenter = new Vector2(0.5f, 0.5f);

    public void CutToCircle()
    {
        Texture2D originalTex = originalSprite.texture;
        Texture2D circleTex = new Texture2D(originalTex.width, originalTex.height, TextureFormat.RGBA32, false);

        for (int x = 0; x < originalTex.width; x++)
        {
            for (int y = 0; y < originalTex.height; y++)
            {
                float uvX = (float)x / originalTex.width;
                float uvY = (float)y / originalTex.height;
                float dist = Vector2.Distance(new Vector2(uvX, uvY), circleCenter);
                Color pixelColor = originalTex.GetPixel(x, y);
                
                if (dist > circleRadius)
                {
                    pixelColor.a = 0;
                }
                circleTex.SetPixel(x, y, pixelColor);
            }
        }

        circleTex.Apply();
        Sprite circleSprite = Sprite.Create(circleTex, originalSprite.rect, originalSprite.pivot);
        GetComponent<SpriteRenderer>().sprite = circleSprite;

        // 可选:保存纹理到本地
        // byte[] bytes = circleTex.EncodeToPNG();
        // File.WriteAllBytes(Application.persistentDataPath + "/circle_avatar.png", bytes);
    }
}

使用步骤:

  1. 将脚本挂载到带有SpriteRenderer的GameObject上
  2. 赋值originalSprite,调整参数后调用CutToCircle()方法即可完成裁剪

内容的提问来源于stack exchange,提问作者Jerrox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:01:25