我想模拟一个充满“水”的立方体。我想使用纹理或图像来实现一个非常基本的解决方案,而不要使用粒子动画或类似的东西。更清楚地说,如果立方体填充了40%,我希望看到游戏对象具有40%的颜色和60%的白色。不幸的是,我也是Unity的新手。有人可以给我一些提示或指向我的一种可以帮助我的教程吗?
感谢您的时间和回答
答案 0 :(得分:1)
一种选择是使用抠图着色器。下面是一个示例:
Shader "Fade/Diffuse"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_FadeMap ("Fade Map", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader
{
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Opaque"}
LOD 300
Cull Off
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
sampler2D _FadeMap;
float _Cutoff;
fixed4 _Color;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 diffuse = tex2D(_MainTex, IN.uv_MainTex) * _Color;
fixed4 fadeSample = tex2D(_FadeMap, IN.uv_MainTex);
bool cut = (fadeSample.r + fadeSample.g + fadeSample.b)/3.0 < _Cutoff ? false : true;
o.Albedo = cut ? diffuse.rgb : float3(1,1,1);
}
ENDCG
}
FallBack "Transparent/Cutout/Diffuse"
}
此着色器具有2个纹理:
此解决方案的重要一件事是立方体的UV贴图。如果使用标准的内置立方体,则会注意到“水位”也在立方体的顶部和底部以及某些侧面的错误方向上移动。您将需要使用UV制作自己的立方体,该UV将立方体的顶部映射到渐变贴图的黑色部分。
这是最终结果: