Компьютеры

Как превратиться в черный в Unity

Автор: Peter Berry
Дата создания: 15 Июль 2021
Дата обновления: 9 Май 2024
Anonim
Обратная маска - мультяшный черный круг в юнити
Видео: Обратная маска - мультяшный черный круг в юнити

Содержание

Мэтт Берд пишет всякую чушь, но большую часть своего времени он посвящает написанию прохождений игр.

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

  • Загрузочные экраны
  • Переходы экрана
  • Конец кат-сцены
  • Сцены смерти / Game Over
  • Создание некоторых спецэффектов
  • Меню
  • Во многих других ситуациях есть масса примеров.

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

Метод 1: прикрепить к камере

Чтобы создать эффект плавного перехода в черный, вам понадобится прямоугольное черное изображение, размер которого не меньше разрешения вашего экрана. Сам квадрат может быть любого размера, если он является плоским, сплошным черным. Вы можете создать это одним из двух способов:


  • В Единство, перейти к Ресурсы в верхнем меню, затем Создавать, затем до Спрайтыи перейти на Square. Это создаст небольшой белый квадрат. GameObject. Изменить Цвет в СпрайтРендерер к Чернить. Вуаля.
  • Вы также можете создать его в графической программе по вашему выбору и импортировать в Unity как файл .png. Создайте новое изображение, установите черный цвет краски и используйте Наполнять инструмент, чтобы сделать все изображение черным. Кусок пирога.

Независимо от того, как вы это сделаете, теперь у вас есть GameObject, который выглядит полностью черным. Установите его Sorting Layer на что-нибудь выше всех остальных GameObject, чтобы он всегда отображался сверху. Теперь вы можете растянуть GameObject до размеров экрана, сделав его таким же большим, как или немного больше, чем ваша камера, покрывая все, что камера видит, когда она активна. Вы также можете привязать его к своей камере, чтобы он следил за камерой, что позволяет вам затемнять область обзора камеры по своему желанию.


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

Метод 2: использование холста пользовательского интерфейса

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

  1. Чтобы создать холст пользовательского интерфейса, щелкните правой кнопкой мыши на своем Иерархия и прокрутите вниз до UI, внизу. Выбирать Холст. Это создаст холст пользовательского интерфейса в иерархии, и холст будет отображаться в виде огромного квадрата в представлении сцены. Это позволяет вам манипулировать элементами пользовательского интерфейса, не затрагивая остальную часть вашей игры.
  2. Как только это будет сделано, щелкните правой кнопкой мыши на Холст в Иерархия, спуститься к UI снова и выберите Изображение. Это создаст пустое изображение на вашем Холст. Нажмите на Исходное изображение в компоненте изображения изображения, и вы можете выбрать свой квадрат, выбранный в предыдущем методе.
  3. Установите черный цвет, если вы еще этого не сделали, а затем измените масштаб изображения в соответствии с разрешением вашего экрана. Вы готовы к року.

Почему этот метод лучше? Одна из причин: он позволяет затемнять элементы пользовательского интерфейса рядом с остальной частью экрана. Дочерние элементы ниже родительского упорядочиваются по слоям в зависимости от того, насколько далеко они находятся в иерархии. На скриншоте выше вы увидите, что «BlackOutSquare» находится наверху иерархии родитель / дочерний элемент Canvas, что означает, что все, что происходит после него, по-прежнему будет отображаться, поскольку они находятся на более высоких уровнях по сравнению с BlackOutSquare. Это позволяет игрокам по-прежнему видеть меню, когда черный квадрат исчезает ...


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

Перейдите в настройку Color BlackOutSquare и измените Alpha (A) на 0. Это полностью затухнет BlackOutSquare при подготовке к следующему шагу.

Кодирование

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

Создайте новый скрипт с целью кодирования вашей функции плавного перехода в черный. (Если вы выбрали метод UI Canvas, вы, вероятно, будете использовать этот же сценарий для множества задач, связанных с пользовательским интерфейсом, поэтому я предлагаю довольно общее имя. UIController, может быть? На ваше усмотрение.) Теперь вам нужно создать несколько переменных и функций:

Прежде всего: вам нужно добавить UnityEngine.UI в список пространств имен в верхней части скрипта. Пространства имен - это коллекции классов, которые предоставляют вам доступ к множеству различных функций. C # обычно не может анализировать элементы пользовательского интерфейса, такие как изображения в сценариях, поэтому добавление UnityEngine.UI необходимо для управления вашим пользовательским интерфейсом.

Общедоступный GameObject вверху, blackOutSquare, является эталонным слотом для вашего GameObject с переходом в черный цвет. Вернитесь в Unity, как только вы создали переменную, и перетащите созданный квадрат в Инспектор. Теперь вы можете вызывать атрибуты квадрата и управлять ими. Очень просто.

Coroutine FadeBlackOutSquare немного сложнее, поэтому мы немного разберем его:

  • Во-первых, в этом примере мы решили создать одну функцию, а не две. Ты мог создайте две функции, чтобы сделать это - одну для постепенного появления квадрата, одну для его обратного исчезновения, но вы получите меньше кода, если просто сделаете его одной сопрограммой.
  • Затем у нас есть bool fadeToBlack = true. В этом случае, если функция вызывается и fadeToBlack имеет значение true, blackOutSquare станет полностью непрозрачным, затемняя экран. Если вы вызовете функцию и вместо этого установите для fadeToBlack значение false, blackOutSquare исчезнет и покажет GameObjects внизу. Это то, что позволяет нам превратить две функции в одну. Мы установили для него значение true по умолчанию, поэтому, если вы не укажете код иначе, при вызове Coroutine Unity будет считать, что вы пытаетесь исчезнуть до черного.
  • Далее идет int fadeSpeed ​​= 5. Это позволит нам контролировать, насколько быстро blackOutSquare будет появляться или исчезать. По умолчанию fadeSpeed ​​равен 5, но вы можете изменить его на любой номер, который вам нравится при вызове Coroutine.
  • Наконец, у нас есть yield return new WaitForEndOfFrame () ;. Сопрограммам требуется определенное количество времени, чтобы избежать ошибок, поэтому оно используется в основном для предотвращения ошибок. Мы избавимся от него через минуту, поэтому вам не нужно его туда класть самостоятельно.

Теперь о тяжелой работе. Чтобы исчезнуть в blackOutSquare, нам нужно закодировать нашу Coroutine следующим образом:

Поскольку Unity не позволяет напрямую манипулировать четырьмя переменными, составляющими цвет GameObject (r, g, b, a), нам нужно сразу изменить весь Color. Для этого мы берем атрибуты Color blackOutSquare как новый Color, objectColor и используем его в дальнейшем. Нам также понадобится float, в данном случае fadeAmount, который поможет нам вычислить, насколько непрозрачность GameObject будет изменяться на каждом кадре.

Вложите все в bool fadeToBlack, затем создайте оператор while (). Это while () укажет Unity продолжить цикл по этому коду до тех пор, пока альфа-канал blackOutSquare не станет больше 1, то есть станет полностью видимым. Затем мы вычисляем fadeAmount - текущую альфа-версию objectColor, плюс модификатор, который регулирует скорость затухания в зависимости от времени и числа fadeSpeed ​​- и вставляем это число в objectColor как новое значение Alpha. Остальные три атрибута objectColor изменять не нужно, поэтому оставьте их как objectColor.r, objectColor.g и objectColor.b.

Почти сделано. Затем нам нужно изменить цвет blackOutSquare, чтобы он соответствовал цвету objectColor, что легко сделать, и ввести команду для Coroutine, чтобы вернуть значение null. Это говорит Coroutine не продвигаться дальше. Когда yield return null включен в оператор while (), он просто останавливает все до тех пор, пока не будет выполнено условие оператора while (). В этом случае, когда объект становится непрозрачным, while () завершается.

Теперь вы настроены на переход в черный цвет. Ура! Как насчет исчезновения черноты? К счастью, это простой случай копирования и вставки. Возьмите все внутри if (fadeToBlack) и установите его после оператора else внизу. Затем измените условие while () с 1 на> 0 и расчет fadeAmount с сложения на вычитание. Это говорит Unity переместить альфа-канал blackOutSquare в сторону нуля, останавливаясь только тогда, когда он достигает нуля. Теперь ваш GameObject снова невидим. Двойной ура!

Добавьте несколько операторов if (Input) в функцию Update (), и вы получите что-то вроде этого:

Предполагая, что вы все сделали правильно, когда вы нажмете кнопку A на клавиатуре, когда игра активна, появится ваш BlackOutSquare GameObject. Нажмите S, и он снова исчезнет. У вас есть успешная функция перехода в черный цвет! Поздравляю! Вы, вероятно, захотите использовать некоторые bools для предотвращения ошибок, если вы, конечно, используете это в настройках игры - и игроки не должны иметь доступ к функции перехода в черный со своих клавиатур, - но этот подход поможет вам начать создание правильного экрана. последовательности переходов для вашей игры.

И последнее замечание относительно сопрограмм. В операторах if (Input) вы заметите, что вызовы функций вложены внутри операторов StartCoroutine (). Хотя вы не получите сообщение об ошибке, если вызовете Coroutine без использования StartCoroutine (), Coroutine не начнется если вы не добавите лишний бит кода. Так что, если вы не можете заставить свой GameObject появляться и исчезать, возможно, именно поэтому.

Интересное на сегодня

Советуем

13 причин, по которым Джейк Пол стал известен на YouTube
Интернет

13 причин, по которым Джейк Пол стал известен на YouTube

Кшиштоф - исследователь YouTube более 8 лет, который часами исследует, анализирует и раскрывает тенденции, проблемы и средства массовой информации YouTube.Джейк Пол был одним из самых горячих и популя...
8 из лучших списков ботов Discord, которые вы должны проверить
Интернет

8 из лучших списков ботов Discord, которые вы должны проверить

Сьюзан занимается разработкой ботов в Di cord по ночам, а днем ​​- программистом.В этом руководстве мы собираемся проверить лучшие списки ботов Di cord, чтобы вы могли найти самых крутых ботов, которы...