forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D/GUI (http://forum.boolean.name/forumdisplay.php?f=167)
-   -   Что-то не то с RawImage. (http://forum.boolean.name/showthread.php?t=20882)

Crystal 27.12.2020 09:43

Что-то не то с RawImage.
 
Вложений: 1
Салют.
Две проблемы у меня:

1. rawimage всегда отображается с артефактами,
по краям появляются некоторые участки шириной в 1-2 пикселя,
закрашенные не пойми чем не пойми откуда выплывшим.
На самом png изображении этих косяков нет, их создаёт Unity.
Просто я создаю rawimage, натягиваю через инспектор на него
картинку, и получаю такую вот картину.

Пример во вложениях к посту.

2. Появилась потребность двигать rawimage по канвасу,
я с этим справляюсь, но результат меня неустраивает.
Грубо говоря с двух сторон канваса я двигаю на встречу
друг другу 2 rawimage, каждая должна пройти путь
в половину ширины экрана, и остановится.
Работает всё, но в половине случаев картинки проходят
на несколько пикселей больше расстояние, и я не могу понять
в чём проблема. Один из участков кода отвечающий за сближение:

Код:

        SW = Screen.width;

        if (FightScene.ZanaveskaSost == 1 && LH <= SW - 1)
        {

            LH = LH + 1f * Time.deltaTime * 1000;
 
            rectTransfrom.offsetMax -= new Vector2(-0.5f, 0) * Time.deltaTime * 1000;
            rectTransfrom2.offsetMin -= new Vector2(0.5f, 0) * Time.deltaTime * 1000;
       

            LogoLeft.offsetMin += new Vector2(0.5f, 0) * Time.deltaTime * 1000;
            LogoRight.offsetMax -= new Vector2(0.5f, 0) * Time.deltaTime * 1000;
            LogoLeft.offsetMax += new Vector2(0.5f, 0) * Time.deltaTime * 1000;
            LogoRight.offsetMin -= new Vector2(0.5f, 0) * Time.deltaTime * 1000;
        }

Каждый раз разный результат, rawimage практически в центре
останавливаются, но с погрешностью (чаще нахлёст друг на друга),
и это мне всю картину в целом портит.

Crystal 27.12.2020 12:10

Ответ: Что-то не то с RawImage.
 
Обе проблемы решил другим вариантом кода,
при чём первая проблема решилась сама собой,
при движении артефактов в окне "Game" не видно,
но отображаются в "Scene".

Код:

if (FightScene.ZanaveskaSost == 1 && LH < SW)
        {

            if (SuperTimer < 1f) { SuperTimer = SuperTimer + 1f  * Time.deltaTime * 1000; }

            if (SuperTimer > 0f)
            {
                LH = LH + Mathf.Floor(20f);
                SuperTimer = 0f;

                rectTransfrom.offsetMax -= new Vector2(-10f, 0);
                rectTransfrom2.offsetMin -= new Vector2(10f, 0);


                ZanaveskaLogoLeft.transform.Translate(Vector2.right * 10f);
                ZanaveskaLogoRight.transform.Translate(Vector2.left * 10f);

            }
        }


pax 29.12.2020 00:55

Ответ: Что-то не то с RawImage.
 
По идее первая проблема связана с маппингом текстуры. Т.е. вот этот желтый кусок у тебя скорее всего есть с другой стороны текстуры. Обычно такое решается установкой параметра Wrap Mode = Clamp в настройках импорта.
А по поводу второй проблемы - в очередной раз призываю использовать анимации, а не код для таких задач)

Crystal 30.12.2020 05:26

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от pax (Сообщение 318188)
По идее первая проблема связана с маппингом текстуры. Т.е. вот этот желтый кусок у тебя скорее всего есть с другой стороны текстуры. Обычно такое решается установкой параметра Wrap Mode = Clamp в настройках импорта.
А по поводу второй проблемы - в очередной раз призываю использовать анимации, а не код для таких задач)

С первым ничего не понял.
Со вторым, у меня ещё было много вариантов кода,
и проблема не решалась, из-за того, что у юнити всё в
рандомно-примерных флоатах, векторах, а дальтатайм
вообще срабатывает через разное время.

Финальный код, это на последнем сближении я просто
координаты желаемые уже устанавливаю вручную,
выравниваю короче это безобразие. Визуально вроде скачка незаметно.

А на счёт анимаций. Ну хз, я здесь подстраиваю картинки под высоту
и ширину экрана, заведомо не зная какое разрешение у игрока,
как это делать через анимации без кода я хз )

Но повторю, проблема решена принудительным трансформпозишном на
последние нужные координаты в конце этого безобразия.

Код:

if (GLOBALSUPERSCRIPT.CamStop == 0 && FightScene.ZanaveskaSost == 1) { GLOBALSUPERSCRIPT.CamStop = 1; SW = Screen.width; }

        if (FightScene.ZanaveskaSost == 1 && LH < SW)
        {
            if (ZanaveskaLeft.gameObject.activeSelf == false)
            {
                ZanaveskaLeft.gameObject.SetActive(true);
                ZanaveskaRight.gameObject.SetActive(true);

            }

            if (SuperTimer < 1f) { SuperTimer = SuperTimer + 1f * Time.deltaTime * 1000; }

            if (SuperTimer > 0f)
            {
                LH = LH + Mathf.Floor(20f);
                SuperTimer = 0f;

                rectTransfrom.offsetMax -= new Vector2(Mathf.Floor(-10f), 0);
                rectTransfrom2.offsetMin -= new Vector2(Mathf.Floor(10f), 0);


                ZanaveskaLogoLeft.transform.Translate(Vector2.right * Mathf.Floor(10f));
                ZanaveskaLogoRight.transform.Translate(Vector2.left * Mathf.Floor(10f));

            }
        }

        if (FightScene.ZanaveskaSost == 1 && LH >= SW && MicroTimer == 0f)
        {
            MicroTimer = 2f;
            float a = Mathf.Floor(ZanaveskaLogoLeft.transform.position.y);
            float b = Mathf.Floor(ZanaveskaLogoRight.transform.position.y);

            ZanaveskaLogoLeft.transform.position = new Vector2(Mathf.Floor(SW / 2 - 256), a);
            ZanaveskaLogoRight.transform.position = new Vector2(Mathf.Floor(SW / 2), b);

        }


Arton 30.12.2020 20:52

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Crystal (Сообщение 318190)
С первым ничего не понял.

Захватывается часть текстуры с её противоположной стороны.
Обычно бывает на низких уровнях mipmap'ов.

Пример:

Цитата:

Сообщение от ABTOMAT (Сообщение 289025)
Как бороться?
Либо включить для "переходных" Clamp UV по одной из осей, чтобы вместо тайлинга получалась "растяжка" из пикселей того же цвета.


Crystal 31.12.2020 05:18

Ответ: Что-то не то с RawImage.
 
Наконец-то появилось время открыть свой проект.
Это проблему решило -
Цитата:

Wrap Mode = Clamp
Непонятно только, почему по умолчанию нельзя было сделать
нормальную загрузку текстур в юнити.

Arton 31.12.2020 11:32

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Crystal (Сообщение 318200)
Непонятно только, почему по умолчанию нельзя было сделать
нормальную загрузку текстур в юнити.

Это и есть режим по умолчанию везеде.
Попросту удобно когда текстура сама зацикливается, нежели при моделирование каждый раз менять.
Остальное, побочные эффекты ввиду самой логики работы.

По этому на моделях для игр, рекомендуется как можно меньше швов и стараться их прятать, что бы не вылезали такие косяки.

В Blitz3D точно так же тайлиться, а для настроек были флаги:
Цитата:

16: Clamp U - ограничить текстуру по координате U
32: Clamp V - ограничить текстуру по координате V

Crystal 31.12.2020 17:37

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Arton (Сообщение 318204)
Это и есть режим по умолчанию везеде.
Попросту удобно когда текстура сама зацикливается, нежели при моделирование каждый раз менять.
Остальное, побочные эффекты ввиду самой логики работы.

По этому на моделях для игр, рекомендуется как можно меньше швов и стараться их прятать, что бы не вылезали такие косяки.

В Blitz3D точно так же тайлиться, а для настроек были флаги:

В моём случае это 2D, текстура на канвасе.

Arton 31.12.2020 19:03

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Crystal (Сообщение 318206)
В моём случае это 2D, текстура на канвасе.

2D это 3D

На скриншоте в первом посте выглядит как 3D.

Crystal 01.01.2021 09:30

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Arton (Сообщение 318209)
2D это 3D

На скриншоте в первом посте выглядит как 3D.

С каких пор канвас стал 3D? Это 2D UI объект на скриншоте, RawImage.

ARA 01.01.2021 21:23

Ответ: Что-то не то с RawImage.
 
В Юнити нет 2d :)

Arton 02.01.2021 02:55

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Crystal (Сообщение 318210)
С каких пор канвас стал 3D? Это 2D UI объект на скриншоте, RawImage.

Ну, 2D это условность, абстракция. Всё через полигональное 3D делается.
Вспомни в пример Блиц, когда нацепляли квады для постобработки на камеру или интерфейса. Тоже самое.

Crystal 02.01.2021 07:32

Ответ: Что-то не то с RawImage.
 
Вафля короче, 2D должно быть 2Dшным...

Arton 02.01.2021 10:19

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Crystal (Сообщение 318220)
Вафля короче, 2D должно быть 2Dшным...

Тогда возникает вопрос, что и как его будет обрабатывать? Универсальной реализации, как с полигональной графикой не придумали.
Это совсем не плохо что 2D через 3D идёт. Всё зависит от разработчиков движка.

P. S. Так-то 3D это всего лишь расширение 2D. Видяхе вовсе всё равно, что там у пользователя на выходе, ей главное данные правильно скормить.

Crystal 02.01.2021 13:45

Ответ: Что-то не то с RawImage.
 
Цитата:

Сообщение от Arton (Сообщение 318225)
Тогда возникает вопрос, что и как его будет обрабатывать? Универсальной реализации, как с полигональной графикой не придумали.
Это совсем не плохо что 2D через 3D идёт. Всё зависит от разработчиков движка.

P. S. Так-то 3D это всего лишь расширение 2D. Видяхе вовсе всё равно, что там у пользователя на выходе, ей главное данные правильно скормить.

Я точно не помню, но вроде при создании проекта можно указать
он 2D или 3D, и что-то мне подсказывает в режиме 2D текстуры
работают по другому.


Часовой пояс GMT +4, время: 04:34.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot