Добавлен
Можно ли как-то сделать молнию в 2д?
и каким образом?
у нас есть текстура самой молнии, которая бесшовная (естественно только с одной стороны) как в варе.
как можно растягивать такую молнию, но чтобы менялся только размер спрайта, а текстура не растягивалась?
вопрос на засыпку: анимация 2д текстуры этой же молнии, как оно делается?

Принятый ответ

Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
29
10 лет назад
0
Tiodor, не уверен
0
24
10 лет назад
Отредактирован RSQR
0
Tiodor:
alexprey, то есть несколько таких молний направленных в разные точки сделать не выйдет?
только для каждой разные материалы создавать?
ну если у тебя несколько одинаковых молний - разные материалы не нужны, в противном случае на каждую молнию по материалу. А вообще можно создавать материал в памяти и удалять когда он не используется.
@MenuItem("GameObject/Create Material")
static function CreateMaterial () {
    // Create a simple material asset
    var material = new Material (Shader.Find("Diffuse"));
     AssetDatabase.CreateAsset(material, "Assets/" + Selection.activeGameObject.name + ".mat");
}
0
29
10 лет назад
0
RSQR, вот я и говорю, что надо создавать на каждую молнию свой материал
Хотя лучше посмотреть в сторону шейдеров
0
24
10 лет назад
Отредактирован prog
0
Tiodor, alexprey, RSQR, а нет ли в юнити стандартного шейдерного материала, который использует не фиксированный тайлинг, а свободный - сколько раз текстура влазит на геометрию при заданном масштабе, столько и отрисовуется?
0
24
10 лет назад
0
prog:
Tiodor, alexprey, RSQR, а нет ли в юнити стандартного шейдерного материала, который использует не фиксированный тайлинг, а свободный - сколько раз текстура влазит на геометрию при заданном масштабе, столько и отрисовуется?
стандартных шейдеров там очень мало, особенно бесплатных) Такого шейдера увы нету.
0
29
10 лет назад
0
prog, было б, не было бы проблем)
0
30
10 лет назад
0
я надеюсь, что разработчики будут активно двигаться в сторону 2д. ну надеюсь на это и расширят функционал.
0
24
10 лет назад
Отредактирован prog
0
RSQR, ну, значит, нужно писать - ничего сложного в этом нет.
Например, на соотношении высоты и ширины геометрии считаем вертексным шейдром кол-во тайлов и передаем пиксельному шейдеру, который, в свою очередь, уже выполняет сам тайлинг. Вот добавить анимацию будет чуть сложнее - нужно как-то получить текущее время и выбрать на его основе нужный кадр (читай смещение).
Как вариант - нет ли свободного тайлинга в свойствах материалов/текстур? Часто есть такая возможность, при том, что по умолчанию она не используется.
0
24
10 лет назад
0
Tiodor:
я надеюсь, что разработчики будут активно двигаться в сторону 2д. ну надеюсь на это и расширят функционал.
Ну... функционал-то есть, только этого функционала надо самому добиваться)
Нашёл шейдер, на работоспособность пока не тестил
Shader "Tiles" {

    Properties {

        _MainTex ("Base (RGB)", 2D) = "white" {}

        _gNumTiles ("Number Of Tiles", Range (1,100)) = 1

        _gThreshhold ("Edge Width", Range (0.0,2.0)) = 0.15

        _gEdgeColor ("Color", Color)  = (.5, .5, .5, 1)

    }

    SubShader {

        Tags { "RenderType"="Opaque" }

        LOD 200

        

        CGPROGRAM

        #pragma surface surf Lambert

 

        sampler2D _MainTex;

 

        struct Input {

            float2 uv_MainTex;

        };

        

        float _gNumTiles;

        float _gThreshhold;

        float4 _gEdgeColor;

        

    void surf (Input IN, inout SurfaceOutput o) {

            

        half size = 1.0/_gNumTiles;

        half2 Pbase = IN.uv_MainTex - fmod(IN.uv_MainTex,size.xx);

        half2 PCenter = Pbase + (size/2.0).xx;

        half2 st = (IN.uv_MainTex - Pbase)/size;

        half4 c1 = (half4)0;

        half4 c2 = (half4)0;

        half4 invOff = half4((1-_gEdgeColor.xyz),1);

        if (st.x > st.y) { c1 = invOff; }

        half threshholdB =  1.0 - _gThreshhold;

        if (st.x > threshholdB) { c2 = c1; }

        if (st.y > threshholdB) { c2 = c1; }

        half4 cBottom = c2;

        c1 = (half4)0;

        c2 = (half4)0;

        if (st.x > st.y) { c1 = invOff; }

        if (st.x < _gThreshhold) { c2 = c1; }

        if (st.y < _gThreshhold) { c2 = c1; }

        half4 cTop = c2;

        half4 tileColor = tex2D(_MainTex,PCenter);

        half4 result = tileColor + cTop - cBottom;

        o.Albedo = result.rgb;

        o.Alpha = result.a;

            

        }

        ENDCG

    } 

    FallBack "Diffuse"

}
0
24
10 лет назад
0
RSQR, не годится же - он получает кол-во тайлов в параметрах, а не считает на основе размеров геометрии. А передача параметров в шейдер, вероятно, потребует создания отдельного материала, как и для стандартного. Не то чтобы это было такой проблемой - создание отдельного экземпляра материала динамически это нормально, просто можно ведь в данном конкретном случае обойтись без этого - геометрия молнии проста как пробка (пока не гарантирую работоспособность предложенного мной алгоритма т.к. нет времени попробовать его реализовать на практике, но такой шейдер и мне самому не помешает).
0
14
10 лет назад
0
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.