Замена цвета спрайта в районе видимости камеры

Общие вопросы о Unity3D

Замена цвета спрайта в районе видимости камеры

Сообщение Orcan 12 окт 2017, 10:23

Привет всем! Нужно сделать визуальный эффект такой. Когда заходит персонаж в здание Убирается стена снаружи, показывается внутренние комнаты здания (это я всё сделал). Нужно чтобы всё что осталось снаружи улицы потемнело в чёрный цвет. Не знаю какой метод применить оптимальный, не хочется все спрайты на сцене в чёрный цвет превращать(сцена большая дорого выйдет) , также не хочется каждый спрайт который на улице рядом с домом Тегом помечать(или как-то по другому помечать) чтоб потом по нему находить, что закрашивать надо. Хочется оптимальный вариант не рисурсоёмкий Оптимально бы было закрасить все спрайты только в районе видимости камеры . Есть какие соображение на этот счёт?
Orcan
UNIт
 
Сообщения: 98
Зарегистрирован: 25 сен 2016, 04:22

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Valentinus 12 окт 2017, 10:50

наложите на камеру маску (в центре прозрачную, по краям полутемную). маску надо динамически сгенерить по форме комнаты, когда перс туда заходит. если перс не строго в центре, то надо центр маски корректировать на него.
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 654
Зарегистрирован: 24 мар 2017, 18:33

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Orcan 12 окт 2017, 16:42

а как нибудь без генерации, можно например шейдеры какие наложить, чтоб комната не теряла цвет. Могу ли шейдеры такое?
Orcan
UNIт
 
Сообщения: 98
Зарегистрирован: 25 сен 2016, 04:22

Re: Замена цвета спрайта в районе видимости камеры

Сообщение samana 12 окт 2017, 17:23

Можно попробовать при вхождении в дом, выставлять его на передний план (вместе со всем содержимым и игроком с помощью слоёв) и просто за дом класть большой тёмный спрайт, чтобы он заставил собой всё остальное. При выходе менять всё обратно.

Или в старте найти все спрайты на сцене (чтобы найти один раз и не искать постоянно), а так же создать отдельные группы (массивы) спрайтов для каждого дома. Затем создать тёмный материал спрайта. При вхождении в дом назначить всем спрайтам сцены тёмный материал, кроме спрайтов дома и игрока. При выходе из дома назначать всем спрайтам дефолтный материал.
Аватара пользователя
samana
Адепт
 
Сообщения: 3616
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск
  • Сайт

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Orcan 12 окт 2017, 18:07

Да я тоже 2 вариант рассматривал(не хотел потому что спрайтов много слишком), думаю нету больше выбора другого. Какой метод ищет все Объекты на карте с компонентом "SpriteRenderer"?
Orcan
UNIт
 
Сообщения: 98
Зарегистрирован: 25 сен 2016, 04:22

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Anonymyx 12 окт 2017, 20:27

или при вхождении в дом рендерить только слои (нужные спрайты) дома и сделать режим камеры solid color с черным цветом.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1368
Зарегистрирован: 05 апр 2015, 15:55

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Orcan 13 окт 2017, 01:08

Anonymyx пожалуйста можно поподробнее?
Orcan
UNIт
 
Сообщения: 98
Зарегистрирован: 25 сен 2016, 04:22

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Anonymyx 13 окт 2017, 13:25

ну, можно. Но вам придется лепить слои для обхектов дома и объектов улицы, т.е. все объекты которые должны отображаться когда вы в доме, имеют слои, например, InnerObj, а снаружи - OuterObj;
У камеры background color делаете Черный цвет.

Дальше пишите небольшой скрипт для дверей (или что там у вас)
Синтаксис:
Используется csharp
    [SerializeField]
    Camera mainCamera;

    void OnTriggerEnter()
    {
//Тут проверка, кто вошел в триггер.
        {
            mainCamera.clearFlags = CameraClearFlags.SolidColor;
            mainCamera.cullingMask = 1 << 8;
        }
    }

    void OnTriggerExit()
    {
        mainCamera.clearFlags = CameraClearFlags.Skybox;
        mainCamera.cullingMask = 1 << 9;
    }

Вместо 8 и 9 - номера ваших слоев. Т.е. если вошел в дом, отображаются предметы со слоем 8, а если вышел - 9. Причем, когда мы дома, фоновый цвет будет весь черный, а когда вышли, отобразится нормальный скайбокс. Можно комбинировать слои через побитовый 'или |',    1 << 9 | 1 << 0      - т.е. 9 слои и слой default.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1368
Зарегистрирован: 05 апр 2015, 15:55

Re: Замена цвета спрайта в районе видимости камеры

Сообщение Orcan 14 окт 2017, 12:43

Спасибо за ответ
Orcan
UNIт
 
Сообщения: 98
Зарегистрирован: 25 сен 2016, 04:22


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: Lolipop и гости: 14