Render.ru

Как уберечь игру от плохой оптимизации и себя - от ненужных затрат времени и сил.

Lu Stra

Знаток
Рейтинг
21
#1
Привет!

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

Пару недель назад я решил что хочу сделать свою индюшатину в UE5, на блупринтах. Сейчас всё на этапе продумывания. Очень хочу что бы то, что я сделал, было с минимумом багов и с хорошей оптимизацией. Что бы не выглядело как очередная никому не нужная поделка. Буду делать простой, но завершенный проект, о как!

Собственно, у меня есть вопрос как оптимизировать кое-что. У меня немного необычная камера, и именно с ней мне нужна помощь. Ниже буду со скринами и видео рассказывать свой план.
1) Будут коридоные локация с тупиковыми ответвлениями для побочек или секреток. Игрок наблюдает за персонажем из заготовленных мной точек в пространстве. То есть без свободного вращения камеры. Пример - Resident Evil 2, но с поправкой на то, что камера помимо того, что стоит в точке, еще и вращается за игроком. Пример - Dino Crisis.
2) По мере продвижения игроком по локации, камера продолжает менять вращение, наблюдая за персонажем игрока, но так же меняет своё положение в пространстве, по заранее заготовленным точкам. В RE2 камера резко перескакивала, а я хочу, что бы она плавно переезжала из места в место (все эти места я хочу заранее расставить), при этом продолжая вращаться так, что бы следить за игроком.
3) Как я это реализовал:
Есть блупринт камеры, в ней два кастомных эвента (оба стоят на EventTIck):
— Двигать камеру, если её текущая локация не соответствует той, которую я в неё отправляю.
— Постоянно вращать камеру так, что бы она следила за игроком.
1.png


Есть блупринт уровня, в нём есть функция, с входным параметром типа "Actor". Когда мне нужно сменить координаты камеры, я вызываю эту функцию, перезаписывая актора, который в ней сейчас. Функция берет координаты этого актора и записывает переменную "новые координаты" блупринта камеры. Соответственно, камера, когда получает новые координаты, начинает движение к ним.
Функция, которая передаёт в камеру новые координаты через актора (которого я отправляю в эту функцию).
2.png


В данный момент это реализовано костыльно: когда игрок проходит триггер бокс, вызывается функция, записывающая актора-пустышку, и передающая его координаты в блупринт камеры (что бы та свои координаты):
3.png



4) О какой помощи я прошу: Я готов заранее расставлять пустышки, что бы заранее просчитать, с каких ракурсов, игрок будет наблюдать за своим персонажем. Но сейчас это реализованно через триггер-боксы, и для каждой смены локейшена камеры мне нужно создавать в левел блупринте событие, которое вызывает функцию, меняющую координаты камеры. В общей сложности, во всей игре получится какое-то безумное количество пустышек и триггербоксов, необходимых только для того, что бы менять координаты камеры. Можно ли сделать это как-то оптимизировать? Я новенький в анриле, и не знаю какие именно фокусы можно сделать блупринтами.
Можно ли сделать так, что бы камера, скажем, сделала get all actors of class (пустышка), сама узнавала какая из пустышек к ней ближе всего, и становилась на её место? Или, например, сделать векторный массив, заполнить его координатами точек наблюдения, что бы камера брала этот массив, сравнивала значения в нём с своими текущими координатами, и плыла к ближайшей найденной в этом массиве точке?
Из всех игр, что я играл, самая подходящая реализация камеры была в The Last Campfire. Очень хочу сделать нечто похожее, по возможности не прибегая к безумному количеству триггер-боксов и пустышек.

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

Моё текущее состояние:

Буду благодарен за любые идеи, как оптимизировать весь этот процесс, помогите ньюфагу сделать хорошую, играбельную игру, а не глючную костыльную поделку (мы ведь все с этого начинали, так?)

Спасибо!
 

Lu Stra

Знаток
Рейтинг
21
#2
UPD: Два добрых человека с двух разных других форумов предложили одинаковую идею, и она кажется мне максимально крутой. Скрины идеи, если вдруг кому-то понадобится такая же система камер, пользуйтесь (очень простая, но очень логичная и классная идея):
1)
0.png


2)
9.png


.
 

Lu Stra

Знаток
Рейтинг
21
#3
Это, вероятно, именно то решение проблемы, которое я хотел найти. Теперь оно есть у меня и, возможно, у кого-то еще, кто набредёт на мои топики.
Вот. Если других идей никто не подкинет, вопрос считаю закрытым.
Спасибо за внимание!
<3
 
Сверху