Unity: применить шейдер к объекту, чтобы изогнуть его текстуру - PullRequest
1 голос
/ 09 апреля 2019

Я делаю бесконечную игру для раннеров в Unity и хочу добавить в нее изогнутый шейдер, как в этом уроке https://youtu.be/6_e_GoWlZOo

Но когда я добавляю этот материал к объекту, он заменяет старый. И когда я добавляю его как второй в Mesh Renderer, он не влияет на первый. https://drive.google.com/open?id=1-kP4A0Xh3P9xVjrwjTiTPlh_WcHnBA1d

Это код шейдера:

Shader "PPP/BendWorld"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Curvature("Curvature", Float) = 0.001
    }
        SubShader
        {
            Tags { "RenderType" = "Opaque" }
            LOD 200

            CGPROGRAM
            #pragma surface surf Lambert vertex:vert addshadow
            uniform sampler2D _MainTex;
            uniform float _Curvature;

            struct Input 
            {
                float uv_MainTex;
            };

            void vert(inout appdata_full v) 
            {
                float4 worldSpace = mul(unity_ObjectToWorld, v.vertex);
                worldSpace.xyz -= _WorldSpaceCameraPos.xyz;
                worldSpace = float4(0.0f, (worldSpace.x * worldSpace.x) * -_Curvature, 0.0f, 0.0f);

                v.vertex += mul(unity_WorldToObject, worldSpace);
            }

            void surf(Input IN, inout SurfaceOutput o) 
            {
                half4 c = tex2D(_MainTex, IN.uv_MainTex);
                o.Albedo = c.rgb;
                o.Alpha = c.a;
            }

            ENDCG
    }
            Fallback "Mobile/Diffuse"
}

Я хочу изогнуть объект и нанести на него текстуру, есть ли способ сделать это?

1 Ответ

1 голос
/ 11 апреля 2019

Относительно проблемы с текстурой: текстура выглядит неработающей, потому что вы определили свой uv_MainTex как float вместо float2.Координаты UV двумерны - если вы определите его как скаляр, он будет использовать только ось U UV.

...