本文介绍了如何编写尊重排序层的Unity Shader?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要使用单位排序层对精灵进行排序。我将一个自定义着色器附加到我的一个精灵上。遗憾的是,带有此着色器的精灵总是画在其他精灵的后面,不尊重排序层。

如何在My Shader中实现排序层方面?

这就是有问题的着色器:提前感谢

Properties {
    _Color ("Color", Color) = (1,1,1,1)
    _MainTex ("Main Tex (RGBA)", 2D) = "white" {}
    _Progress ("Progress", Range(0.0,1.0)) = 0.0
}

SubShader {

    Pass {

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

uniform sampler2D _MainTex;
uniform float4 _Color;
uniform float _Progress;

struct v2f {
    float4 pos : POSITION;
    float2 uv : TEXCOORD0;
};

v2f vert (appdata_base v)
{
    v2f o;
    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
    o.uv = TRANSFORM_UV(0);

    return o;
}

half4 frag( v2f i ) : COLOR
{
    half4 color = tex2D( _MainTex, i.uv);
    float a = color.a;
    if(i.uv.y < _Progress){
    color = _Color;
    }
    color.a = a;
    return color;
}

ENDCG

    }
}

}

我知道需要这样设置一些标签,但是找不到合适的引用,试错没有结果:

Tags { "Queue"="Overlay+1" }
ZTest Off
Blend SrcAlpha OneMinusSrcAlpha
Lighting Off
ZWrite On

推荐答案

您在正确的轨道上。以下是正确的精灵着色器需要添加的内容:

  1. 如果您的游戏是纯2D游戏,则需要禁用ZTest,这样它就不会扰乱您的图层顺序。
  2. 指定要使用的混合类型。
  3. 您的着色器将转到透明度队列的标记。

    SubShader{
        Tags{"Queue" = "Transparent"}
        Pass{
            ZTest Off
            Blend SrcAlpha OneMinusSrcAlpha
            //your CGPROGRAM here
        }
    }
    

This tutorial有一章是关于透明度的,这在编写精灵着色器时非常重要。

这篇关于如何编写尊重排序层的Unity Shader?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-17 17:16