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 制作自己的立方体。

最终结果如下: