我正在使用Unity制作游戏,遇到了这个问题。用户可以从设备上传个人资料图片到我的后端服务器以个性化他们的账户。这个部分工作得很好,但是...
图片是方形矩形的,我想在游戏中展示圆形或者带有圆角的图片?这可以在Unity中使用C#完成吗,还是不可能实现?
我正在使用Unity制作游戏,遇到了这个问题。用户可以从设备上传个人资料图片到我的后端服务器以个性化他们的账户。这个部分工作得很好,但是...
图片是方形矩形的,我想在游戏中展示圆形或者带有圆角的图片?这可以在Unity中使用C#完成吗,还是不可能实现?
这相对来说是比较简单的。你需要使用阿尔法遮罩技术,这是一种使用阿尔法混合方法使某些几何图形的选定部分变为透明。
你需要创建一个阿尔法遮罩,这是一张图像,在这张图像中,你希望用户的个人资料图片完全不透明的地方是白色的,而你希望它完全透明 (在角落处,例如) 的地方是黑色的。如果使用8位阿尔法遮罩,你可以使用254个灰度级在黑色和白色之间进行完全的混合,从而使你的角落看起来圆润而美观。
在你选择的二维图形编辑器中创建你的阿尔法遮罩。在Unity着色器中,绑定用户的个人资料图片和你的阿尔法遮罩。创建一个像素着色器,在其中从用户的个人资料图片中取RGB组件和从你的遮罩中取阿尔法值。
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);
}
这似乎是一篇更详细的关于你想要做的事情的文章 - 它还有一个更完整的着色器示例:Unity3D:无光照阿尔法遮罩着色器
这是有史以来最糟糕的黑客建议。
当然,上方图片的颜色需要与场景中的其他元素融合在一起,这是我会尝试的事情。