Страница 1 из 1

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

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

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

СообщениеДобавлено: 12 окт 2017, 10:50
Valentinus
наложите на камеру маску (в центре прозрачную, по краям полутемную). маску надо динамически сгенерить по форме комнаты, когда перс туда заходит. если перс не строго в центре, то надо центр маски корректировать на него.

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

СообщениеДобавлено: 12 окт 2017, 16:42
Orcan
а как нибудь без генерации, можно например шейдеры какие наложить, чтоб комната не теряла цвет. Могу ли шейдеры такое?

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

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

Или в старте найти все спрайты на сцене (чтобы найти один раз и не искать постоянно), а так же создать отдельные группы (массивы) спрайтов для каждого дома. Затем создать тёмный материал спрайта. При вхождении в дом назначить всем спрайтам сцены тёмный материал, кроме спрайтов дома и игрока. При выходе из дома назначать всем спрайтам дефолтный материал.

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

СообщениеДобавлено: 12 окт 2017, 18:07
Orcan
Да я тоже 2 вариант рассматривал(не хотел потому что спрайтов много слишком), думаю нету больше выбора другого. Какой метод ищет все Объекты на карте с компонентом "SpriteRenderer"?

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

СообщениеДобавлено: 12 окт 2017, 20:27
Anonymyx
или при вхождении в дом рендерить только слои (нужные спрайты) дома и сделать режим камеры solid color с черным цветом.

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

СообщениеДобавлено: 13 окт 2017, 01:08
Orcan
Anonymyx пожалуйста можно поподробнее?

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

СообщениеДобавлено: 13 окт 2017, 13:25
Anonymyx
ну, можно. Но вам придется лепить слои для обхектов дома и объектов улицы, т.е. все объекты которые должны отображаться когда вы в доме, имеют слои, например, 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.

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

СообщениеДобавлено: 14 окт 2017, 12:43
Orcan
Спасибо за ответ