如何实现不缩放纹理的缩放行为?

问题描述 投票:0回答:1

大家好!今天的问题是:如何实现下一个行为:在不缩放纹理的情况下实现缩放行为?所以问题是如何实现下一个行为。我在2D项目中有一个游戏对象,它随着时间的推移会向一侧缩放(实际上是向两边缩放,但也会向缩放方向移动),你可以在下面的gif图上看到它(还不允许直接粘贴gif图)。

玩家下方平台的缩放

如果我附加纹理(精灵?),它也会随着对象的缩放而缩放--这不是我想要做的。一个解决方案是设置 夾子重复 纹理检查器中的参数。但这对我来说也是不可接受的。我不知道如何确切地解释我想做什么......但让我们想象一下,我的最终纹理是不可见的,而在对象的缩放过程中,该纹理的新部分变得可见。你可以在下一张图片上看到这种行为。

我需要的实际行为

我想我需要某种着色器来实现它,所以请提供给我这个脚本(我对着色器编码完全是个新手,只知道基础知识)。考虑到我将对贴在缩放对象上的纹理进行动画处理,也许这也会影响到着色器脚本。干杯。

c# unity3d graphics shader cg
1个回答
0
投票

如果你不打算在你的地板的左边右边有一个定义的开始,你可以在你的shader中使用世界x位置作为uv.x坐标,并使用一个纹理,这将会循环。

下面的代码应该是一个非常基本的例子,你的寻找(注意顶点着色器部分)。

struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = float2(v.vertex.x, v.uv.y);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            return tex2D(_MainTex, i.uv);
        }
© www.soinside.com 2019 - 2024. All rights reserved.