Частицы и шейдеры

Программирование на Юнити.

Частицы и шейдеры

Сообщение ВерховныйНоуНейм 11 фев 2019, 22:05

Дело вот в чем...
На просторах интернетов я нашел шейдер для растворения 2d спрайтов, так как мне лень делать анимацию смерти для каждого врага(а их у меня планируется >25).
Все было прекрасно, до того, как я сделал ракетницу. Частицы от взрыва не отображаются вблизи врага.
Так как я в языке шейдеров не силен, то исправил баг включением другой анимации, если было попадание ракетой.
Проблема была решена только временно...
Сейчас я сделал щиты на некоторых врагах, которые постепенно растворяются, в зависимости от хп щита. На них тот же баг.
Как то я исправил исчезание спрайта, при отрицательном x, строчкой Cull off , но теперь мне нужна ваша помощь.
Шейдер:
Синтаксис:
Используется csharp
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

 Shader "Custom/2D/Dissolve"
{
        Properties {
        _RendererColor ("RendererColor", Color) = (1,1,1,1)
                [PerRendererData] _MainTex ("Main texture", 2D) = "white" {}
                _DissolveTex ("Dissolution texture", 2D) = "gray" {}
                _Threshold ("Threshold", Range(0., 1.01)) = 0.
        }

        SubShader {

                Tags { "Queue"="Transparent" }
                Blend SrcAlpha OneMinusSrcAlpha
                Cull off

                Pass {
                       
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag

                        #include "UnityCG.cginc"

                        struct v2f {
                                float4 pos : SV_POSITION;
                                float2 uv : TEXCOORD0;
                        };
                       
                        sampler2D _MainTex;
                        fixed4 _RendererColor;

                        v2f vert(appdata_base v) {
                                v2f o;
                                o.pos = UnityObjectToClipPos(v.vertex);
                                o.uv = v.texcoord;
                                return o;
                        }

                        sampler2D _DissolveTex;
                        float _Threshold;

                        fixed4 frag(v2f i) : SV_Target {
                                float4 c = tex2D(_MainTex, i.uv) * _RendererColor;
                                float val = tex2D(_DissolveTex, i.uv).r;

                                c.a *= step(_Threshold, val);
                                return c;
                        }
                        ENDCG
                }
        }
}
 

Баг(монстры тестовые, не обращайте внимания):
Изображение
Маленький я и большой Unity
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 64
Зарегистрирован: 25 фев 2017, 19:56

Re: Частицы и шейдеры

Сообщение ВерховныйНоуНейм 13 фев 2019, 21:51

Подпер костылем ~o) ,но в принципе проблема решена, думаю, что она больше не побеспокоит.
Маленький я и большой Unity
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 64
Зарегистрирован: 25 фев 2017, 19:56


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7