Unity - 模拟一个带有纹理的百分比填充立方体
Unity - Simulate a % filled cube with a texture
我想模拟一个装满 "water" 的立方体。我想使用纹理或图像实现一个非常基本的解决方案,没有粒子动画或其他东西。更清楚地说,如果立方体填充了 40%,我希望看到游戏对象有 40% 的颜色和 60% 的白色。不幸的是,我也是 Unity 的新手。有人可以给我一些提示或给我一些可以帮助我的教程吗?
感谢您的时间和回答
一种选择是使用镂空着色器。下面是一个例子:
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 映射。如果您使用标准的内置立方体,您会注意到 "water level" 还在立方体的顶部和底部进行动画处理,并且在某些侧面的方向也是错误的。您必须使用将立方体的顶部映射到淡入淡出贴图的黑色部分的 UV 制作自己的立方体。
最终结果如下:
我想模拟一个装满 "water" 的立方体。我想使用纹理或图像实现一个非常基本的解决方案,没有粒子动画或其他东西。更清楚地说,如果立方体填充了 40%,我希望看到游戏对象有 40% 的颜色和 60% 的白色。不幸的是,我也是 Unity 的新手。有人可以给我一些提示或给我一些可以帮助我的教程吗?
感谢您的时间和回答
一种选择是使用镂空着色器。下面是一个例子:
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 映射。如果您使用标准的内置立方体,您会注意到 "water level" 还在立方体的顶部和底部进行动画处理,并且在某些侧面的方向也是错误的。您必须使用将立方体的顶部映射到淡入淡出贴图的黑色部分的 UV 制作自己的立方体。
最终结果如下: