Привет!
Предыстория: весной прошлого года начал учить с++. Получалось круто, все было понятно, дошел до двумерных массивов, и как то стало скучно. Я моргнул, и внезапно для себя обнаружил, что прошел год, плюсы я забросил, начал ковырять Blender, и работаю 3д аниматором в небольшой геймдев студии.
Пару недель назад я решил что хочу сделать свою индюшатину в UE5, на блупринтах. Сейчас всё на этапе продумывания. Очень хочу что бы то, что я сделал, было с минимумом багов и с хорошей оптимизацией. Что бы не выглядело как очередная никому не нужная поделка. Буду делать простой, но завершенный проект, о как!
Собственно, у меня есть вопрос как оптимизировать кое-что. У меня немного необычная камера, и именно с ней мне нужна помощь. Ниже буду со скринами и видео рассказывать свой план.
1) Будут коридоные локация с тупиковыми ответвлениями для побочек или секреток. Игрок наблюдает за персонажем из заготовленных мной точек в пространстве. То есть без свободного вращения камеры. Пример - Resident Evil 2, но с поправкой на то, что камера помимо того, что стоит в точке, еще и вращается за игроком. Пример - Dino Crisis.
2) По мере продвижения игроком по локации, камера продолжает менять вращение, наблюдая за персонажем игрока, но так же меняет своё положение в пространстве, по заранее заготовленным точкам. В RE2 камера резко перескакивала, а я хочу, что бы она плавно переезжала из места в место (все эти места я хочу заранее расставить), при этом продолжая вращаться так, что бы следить за игроком.
3) Как я это реализовал:
Есть блупринт камеры, в ней два кастомных эвента (оба стоят на EventTIck):
— Двигать камеру, если её текущая локация не соответствует той, которую я в неё отправляю.
— Постоянно вращать камеру так, что бы она следила за игроком.
Есть блупринт уровня, в нём есть функция, с входным параметром типа "Actor". Когда мне нужно сменить координаты камеры, я вызываю эту функцию, перезаписывая актора, который в ней сейчас. Функция берет координаты этого актора и записывает переменную "новые координаты" блупринта камеры. Соответственно, камера, когда получает новые координаты, начинает движение к ним.
Функция, которая передаёт в камеру новые координаты через актора (которого я отправляю в эту функцию).
В данный момент это реализовано костыльно: когда игрок проходит триггер бокс, вызывается функция, записывающая актора-пустышку, и передающая его координаты в блупринт камеры (что бы та свои координаты):
4) О какой помощи я прошу: Я готов заранее расставлять пустышки, что бы заранее просчитать, с каких ракурсов, игрок будет наблюдать за своим персонажем. Но сейчас это реализованно через триггер-боксы, и для каждой смены локейшена камеры мне нужно создавать в левел блупринте событие, которое вызывает функцию, меняющую координаты камеры. В общей сложности, во всей игре получится какое-то безумное количество пустышек и триггербоксов, необходимых только для того, что бы менять координаты камеры. Можно ли сделать это как-то оптимизировать? Я новенький в анриле, и не знаю какие именно фокусы можно сделать блупринтами.
Можно ли сделать так, что бы камера, скажем, сделала get all actors of class (пустышка), сама узнавала какая из пустышек к ней ближе всего, и становилась на её место? Или, например, сделать векторный массив, заполнить его координатами точек наблюдения, что бы камера брала этот массив, сравнивала значения в нём с своими текущими координатами, и плыла к ближайшей найденной в этом массиве точке?
Из всех игр, что я играл, самая подходящая реализация камеры была в The Last Campfire. Очень хочу сделать нечто похожее, по возможности не прибегая к безумному количеству триггер-боксов и пустышек.
Ниже прикрепляю ссылки на небольшой кусочек геймлея Last Campfire, и на то, как это реализованно у меня сейчас, что бы было понятнее, куда я целюсь.
Цель:
Моё текущее состояние:
Буду благодарен за любые идеи, как оптимизировать весь этот процесс, помогите ньюфагу сделать хорошую, играбельную игру, а не глючную костыльную поделку (мы ведь все с этого начинали, так?)
Спасибо!
Предыстория: весной прошлого года начал учить с++. Получалось круто, все было понятно, дошел до двумерных массивов, и как то стало скучно. Я моргнул, и внезапно для себя обнаружил, что прошел год, плюсы я забросил, начал ковырять Blender, и работаю 3д аниматором в небольшой геймдев студии.
Пару недель назад я решил что хочу сделать свою индюшатину в UE5, на блупринтах. Сейчас всё на этапе продумывания. Очень хочу что бы то, что я сделал, было с минимумом багов и с хорошей оптимизацией. Что бы не выглядело как очередная никому не нужная поделка. Буду делать простой, но завершенный проект, о как!
Собственно, у меня есть вопрос как оптимизировать кое-что. У меня немного необычная камера, и именно с ней мне нужна помощь. Ниже буду со скринами и видео рассказывать свой план.
1) Будут коридоные локация с тупиковыми ответвлениями для побочек или секреток. Игрок наблюдает за персонажем из заготовленных мной точек в пространстве. То есть без свободного вращения камеры. Пример - Resident Evil 2, но с поправкой на то, что камера помимо того, что стоит в точке, еще и вращается за игроком. Пример - Dino Crisis.
2) По мере продвижения игроком по локации, камера продолжает менять вращение, наблюдая за персонажем игрока, но так же меняет своё положение в пространстве, по заранее заготовленным точкам. В RE2 камера резко перескакивала, а я хочу, что бы она плавно переезжала из места в место (все эти места я хочу заранее расставить), при этом продолжая вращаться так, что бы следить за игроком.
3) Как я это реализовал:
Есть блупринт камеры, в ней два кастомных эвента (оба стоят на EventTIck):
— Двигать камеру, если её текущая локация не соответствует той, которую я в неё отправляю.
— Постоянно вращать камеру так, что бы она следила за игроком.
Есть блупринт уровня, в нём есть функция, с входным параметром типа "Actor". Когда мне нужно сменить координаты камеры, я вызываю эту функцию, перезаписывая актора, который в ней сейчас. Функция берет координаты этого актора и записывает переменную "новые координаты" блупринта камеры. Соответственно, камера, когда получает новые координаты, начинает движение к ним.
Функция, которая передаёт в камеру новые координаты через актора (которого я отправляю в эту функцию).
В данный момент это реализовано костыльно: когда игрок проходит триггер бокс, вызывается функция, записывающая актора-пустышку, и передающая его координаты в блупринт камеры (что бы та свои координаты):
4) О какой помощи я прошу: Я готов заранее расставлять пустышки, что бы заранее просчитать, с каких ракурсов, игрок будет наблюдать за своим персонажем. Но сейчас это реализованно через триггер-боксы, и для каждой смены локейшена камеры мне нужно создавать в левел блупринте событие, которое вызывает функцию, меняющую координаты камеры. В общей сложности, во всей игре получится какое-то безумное количество пустышек и триггербоксов, необходимых только для того, что бы менять координаты камеры. Можно ли сделать это как-то оптимизировать? Я новенький в анриле, и не знаю какие именно фокусы можно сделать блупринтами.
Можно ли сделать так, что бы камера, скажем, сделала get all actors of class (пустышка), сама узнавала какая из пустышек к ней ближе всего, и становилась на её место? Или, например, сделать векторный массив, заполнить его координатами точек наблюдения, что бы камера брала этот массив, сравнивала значения в нём с своими текущими координатами, и плыла к ближайшей найденной в этом массиве точке?
Из всех игр, что я играл, самая подходящая реализация камеры была в The Last Campfire. Очень хочу сделать нечто похожее, по возможности не прибегая к безумному количеству триггер-боксов и пустышек.
Ниже прикрепляю ссылки на небольшой кусочек геймлея Last Campfire, и на то, как это реализованно у меня сейчас, что бы было понятнее, куда я целюсь.
Цель:
Моё текущее состояние:
Буду благодарен за любые идеи, как оптимизировать весь этот процесс, помогите ньюфагу сделать хорошую, играбельную игру, а не глючную костыльную поделку (мы ведь все с этого начинали, так?)
Спасибо!