UnityTexture2D创建圆角

Man*_*nsa 5 c# texture2d unity-game-engine

我正在统一制作游戏并遇到这个问题。用户可以将个人资料图像从该设备上传到我的后端服务器以个性化该帐户。这部分工作得很好,但是......

图片是正方形,但我想将图像显示为圆形,或者在游戏中显示时带有圆角?这可以在 Unity 中使用 C# 完成还是不可能?

Chr*_*tle 5

这相对简单。您需要使用 alpha 遮罩,这是一种使用 alpha 混合使某些几何体的选定部分透明的方法。

您需要创建一个 alpha 蒙版。当您希望用户的个人资料图片完全不透明时,该图像为白色;当您希望用户的个人资料图片完全透明时,该图像为黑色(在您的情况下,在拐角处)。如果您使用 8 位 Alpha 蒙版,则可以使用黑白之间的 254 种灰色阴影在不透明和透明之间完全混合,为您的角落提供您想要的漂亮、圆润的外观。

在您选择的 2D 图形编辑器中创建您的 alpha 蒙版。在 Unity 着色器中,绑定用户的个人资料图片和 alpha 蒙版。创建一个像素着色器,并在其中从用户的个人资料图片中获取 RGB 分量,并从蒙版中获取 alpha 值:

sampler2D userProfilePic;
sampler2D roundedCornersAlphaMask;

struct PS_IN
{
    float4 position : SV_POSITION;
    float2 texCoord : TEXCOORD0;
};

float4 PixelShader(PS_IN input) : SV_Target
{
    fixed4 profilePicSample = tex2D(userProfilePic, input.texCoord);
    fixed4 alphaMaskSample = tex2D(roundedCornersAlphaMask, input.texCoord);

    return fixed4(
        profilePicSample.r,
        profilePicSample.g,
        profilePicSample.b,
        alphaMaskSample.r);
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一篇关于您想要做什么的更详细的文章 - 它也有一个更完整的着色器示例:Unity3D:Unlit Alpha Mask Shader


And*_*nov 0

这是有史以来最糟糕的黑客建议。

  • 有一个中间透明的图像,但边角是圆角的,不透明。
  • 将其放在个人资料图像的前面(个人资料图像和相机之间)
  • 角将不可见,因为顶部的图片将隐藏它们。

当然,顶部图片的颜色必须与场景中的其他事物融为一体,但这是我会尝试的。