Цель: создать несколько камер и использовать триггеры на C# для изменения представлений.

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

Я собираюсь начать с того, что просто добавлю 4 объекта в свою сцену и сделаю их триггерами.

Мой первый и основной угол камеры будет от третьего лица, поэтому я создам его сейчас.

Далее я собираюсь создать свою вторую камеру, которая будет просто камерой, направленной сверху. Итак, я перемещу вид сцены туда, куда я хочу, чтобы камера смотрела, а затем добавлю камеру в сцену. Затем, поскольку я не хочу, чтобы он двигался, я скажу цели и телу ничего не делать.

Затем я добавлю камеру Tracked Dolly. Итак, я добавлю камеру в сцену, и она попросит меня создать путь. Я добавлю пустой gameObject в сцену и добавлю компонент path, затем перетащу путь в пустой слот Path внутри камеры Тело.

Не забудьте включить Body в Auto Dolly, а капсула должна быть вашим Look At и вашим Follow.

Теперь, когда у меня есть все камеры, которые я собираюсь использовать. Я продолжу и создам игровой объект Manager, а внутри него создам объект Camera Manager.

Далее давайте создадим новый скрипт C# и назовем его Camera Manager.

Во-первых, нам нужно добавить в наш сценарий механизм Cinemachine.

Затем в рамках этого скрипта давайте начнем с создания массива для наших камер.

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

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

Для этого нам понадобятся две функции. Один сбросит все наши камеры на приоритет 10, а другой изменит приоритет на значение 15 (или, по крайней мере, выше 10).

Сначала я создам метод, который сбрасывает все приоритеты камер на 10. Назовем его ResetCams.

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

Далее мне понадобится метод, который выбирает камеру, изменяя ее приоритет на 15. Назовем его SetMasterCam.

Мы можем использовать GetComponent для доступа к камере от третьего лица, которая является элементом 0 в массиве, и установить >приоритетдо 15, так как это будет наша начальная камера.

Теперь мы можем создать наши триггеры. Давайте создадим новый скрипт C# и назовем его CameraSwitchTrigger. Цель этого сценария состоит в том, чтобы всякий раз, когда мы пересекаем триггер, мы могли менять камеру в зависимости от камеры, которую мы хотим для этого раздела.

Для этого мне нужно создать сериализуемое поле, создать переменную int и назвать ее _selectCamera. Это придаст значение камере.

Затем я хочу отправить это значение int на камеру, которую я хочу использовать, в мой CameraManager.

Во-первых, нам нужно получить доступ к диспетчеру камеры. Создайте новую переменную для CameraManager и зафиксируйте ее в меню Пуск.

Теперь мы хотим убедиться, что когда наш игрок взаимодействует с триггером, он активирует нужную камеру. Итак, нам нужно перетащить наш скрипт CameraSwitchTrigger на наши объекты, содержащие наш триггер, и сопоставить каждый триггер с камеройон принадлежит массиву CameraManager.

Но сначала нам нужно убедиться, что нашей капсуле назначен тег. Я создам тег игрока и добавлю его в капсулу.

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

Поскольку я собираюсь взаимодействовать с CameraManager методом, мне нужно вернуться и изменить мои методы с частных на общедоступные. сильный>.

Теперь мы можем получить наши сценарии для этого в функции OnTriggerEnter.

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

Для этого нам нужно добавить переменную в скобки метода SetMasterCam в CameraManager и добавить cam в раздел массив.

Теперь мы можем вернуться к нашему CameraSwitchTrigger и добавить переменную _selectCam в скобки. Это даст ему доступ к переменной int, которую мы даем нашим камерам в сериализованном поле в инспекторе.

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

Теперь мы можем добавить CameraSwitchTrigger к каждому триггеру объекта отдельно и установить переменную в инспекторе для камеры, на которую мы хотим ее переключить.