Ещё немного подробностей добавлю. В юнити в шейдере можно в пассе писать:
Tags { "Queue"="тут значение" }
Это порядок рендера объектов.
про значения написано тут:
https://docs.unity3d.com/462/Documen...haderTags.html
То же самое можно менять в C# через material.renderQueue:
https://docs.unity3d.com/ScriptRefer...nderQueue.html
это свойство по идее оверрайдит то, что в шейдере.
План такой - фейдящиеся объекты временно копируешь. На копию вешаешь Z-only шейдер (с параметрами, которые я описывал выше), при этом ставишь этому шейдеру "Queue" = "Transparent-1" например. Оригиналу материалы не меняешь, но ставишь скриптом renderQueue = 3000. Когда фейд закончился, убираешь копию, а renderQueue возвращаешь на дефолт (-1).