Unity-用纹理模拟百分比填充的立方体

时间:2019-02-04 11:44:38

标签: unity3d textures

我想模拟一个充满“水”的立方体。我想使用纹理或图像来实现一个非常基本的解决方案,而不要使用粒子动画或类似的东西。更清楚地说,如果立方体填充了40%,我希望看到游戏对象具有40%的颜色和60%的白色。不幸的是,我也是Unity的新手。有人可以给我一些提示或指向我的一种可以帮助我的教程吗?

感谢您的时间和回答

1 个答案:

答案 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将立方体的顶部映射到渐变贴图的黑色部分。

这是最终结果:

Here is the final result